code: function request(opts, callback, agents) {
      var uri = url.parse(opts.url);
      var protocol = uri.protocol || DEFAULT_PROTOCOL;
      protocol = protocol.substring(0, protocol.length - 1);
  
      var options = {
          hostname: uri.hostname,
          port: uri.port || DEFAULT_PORTS[protocol] || DEFAULT_PORT,
          path: uri.path,
          method: opts.method,
          headers: opts.headers,
          agent: (agents || defaultAgents)[protocol]
      };
  
      var client = clients[protocol];
      var req = client.request(options, function (res) {
          var data = [];
  
          res.on('data', function (chunk) {
              data.push(chunk);
          });
  
          res.on('end', function () {
              if (data.length) {
                  data = Buffer.concat(data).toString('utf8');
              }
              else {
                  data = '';
              }
              callback(null, res, data);
          });
      });
  
      req.on('error', callback);
  
      var abort = req.abort;
      if (opts.timeout) {
          setTimeout(
              function () {
                  abort.call(req);
                  var e = new Error('TIMEOUT');
                  e.code = 'timeout';
                  callback(e);
              },
              opts.timeout
          );
      }
  
      // 重载abort方法 提示错误
      req.abort = function () {
          abort.call(this);
          var e = new Error('ABORT');
          e.code = 'abort';
          callback(e);
      };
  
      req.write(opts.body || '');
      req.end();
  
      return req;
  }
docs: 发起请求
  
  @inner
  @param {Object} opts 请求参数
  @param {Function} callback 回调函数
  @param {Object=} agents 请求管理对象
  @return {Object}