mirror of https://github.com/jkjoy/sunpeiwen.git
83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
//"version": "2.8.2",
|
|
var ClientRequest = require('./lib/request');
|
|
var response = require('./lib/response');
|
|
var extend = require('xtend');
|
|
var statusCodes = require('builtin-status-codes');
|
|
var url = require('url');
|
|
|
|
var http = exports;
|
|
|
|
http.request = function (opts, cb) {
|
|
if (typeof opts === 'string') opts = url.parse(opts);
|
|
else opts = extend(opts);
|
|
|
|
// Normally, the page is loaded from http or https, so not specifying a protocol
|
|
// will result in a (valid) protocol-relative url. However, this won't work if
|
|
// the protocol is something else, like 'file:'
|
|
var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : '';
|
|
|
|
var protocol = opts.protocol || defaultProtocol;
|
|
var host = opts.hostname || opts.host;
|
|
var port = opts.port;
|
|
var path = opts.path || '/';
|
|
|
|
// Necessary for IPv6 addresses
|
|
if (host && host.indexOf(':') !== -1) host = '[' + host + ']';
|
|
|
|
// This may be a relative url. The browser should always be able to interpret it correctly.
|
|
opts.url = (host ? protocol + '//' + host : '') + (port ? ':' + port : '') + path;
|
|
opts.method = (opts.method || 'GET').toUpperCase();
|
|
opts.headers = opts.headers || {};
|
|
|
|
// Also valid opts.auth, opts.mode
|
|
|
|
var req = new ClientRequest(opts);
|
|
if (cb) req.on('response', cb);
|
|
return req;
|
|
};
|
|
|
|
http.get = function get(opts, cb) {
|
|
var req = http.request(opts, cb);
|
|
req.end();
|
|
return req;
|
|
};
|
|
|
|
http.ClientRequest = ClientRequest;
|
|
http.IncomingMessage = response.IncomingMessage;
|
|
|
|
http.Agent = function () {};
|
|
http.Agent.defaultMaxSockets = 4;
|
|
|
|
http.globalAgent = new http.Agent();
|
|
|
|
http.STATUS_CODES = statusCodes;
|
|
|
|
http.METHODS = [
|
|
'CHECKOUT',
|
|
'CONNECT',
|
|
'COPY',
|
|
'DELETE',
|
|
'GET',
|
|
'HEAD',
|
|
'LOCK',
|
|
'M-SEARCH',
|
|
'MERGE',
|
|
'MKACTIVITY',
|
|
'MKCOL',
|
|
'MOVE',
|
|
'NOTIFY',
|
|
'OPTIONS',
|
|
'PATCH',
|
|
'POST',
|
|
'PROPFIND',
|
|
'PROPPATCH',
|
|
'PURGE',
|
|
'PUT',
|
|
'REPORT',
|
|
'SEARCH',
|
|
'SUBSCRIBE',
|
|
'TRACE',
|
|
'UNLOCK',
|
|
'UNSUBSCRIBE'
|
|
];
|