You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.2 KiB
JavaScript
138 lines
4.2 KiB
JavaScript
7 years ago
|
var http = module.exports;
|
||
|
var EventEmitter = require('events').EventEmitter;
|
||
|
var Request = require('./lib/request');
|
||
|
var url = require('url')
|
||
|
|
||
|
http.request = function (params, cb) {
|
||
|
if (typeof params === 'string') {
|
||
|
params = url.parse(params)
|
||
|
}
|
||
|
if (!params) params = {};
|
||
|
if (!params.host && !params.port) {
|
||
|
params.port = parseInt(window.location.port, 10);
|
||
|
}
|
||
|
if (!params.host && params.hostname) {
|
||
|
params.host = params.hostname;
|
||
|
}
|
||
|
|
||
|
if (!params.scheme) params.scheme = window.location.protocol.split(':')[0];
|
||
|
if (!params.host) {
|
||
|
params.host = window.location.hostname || window.location.host;
|
||
|
}
|
||
|
if (/:/.test(params.host)) {
|
||
|
if (!params.port) {
|
||
|
params.port = params.host.split(':')[1];
|
||
|
}
|
||
|
params.host = params.host.split(':')[0];
|
||
|
}
|
||
|
if (!params.port) params.port = params.scheme == 'https' ? 443 : 80;
|
||
|
|
||
|
var req = new Request(new xhrHttp, params);
|
||
|
if (cb) req.on('response', cb);
|
||
|
return req;
|
||
|
};
|
||
|
|
||
|
http.get = function (params, cb) {
|
||
|
params.method = 'GET';
|
||
|
var req = http.request(params, cb);
|
||
|
req.end();
|
||
|
return req;
|
||
|
};
|
||
|
|
||
|
http.Agent = function () {};
|
||
|
http.Agent.defaultMaxSockets = 4;
|
||
|
|
||
|
var xhrHttp = (function () {
|
||
|
if (typeof window === 'undefined') {
|
||
|
throw new Error('no window object present');
|
||
|
}
|
||
|
else if (window.XMLHttpRequest) {
|
||
|
return window.XMLHttpRequest;
|
||
|
}
|
||
|
else if (window.ActiveXObject) {
|
||
|
var axs = [
|
||
|
'Msxml2.XMLHTTP.6.0',
|
||
|
'Msxml2.XMLHTTP.3.0',
|
||
|
'Microsoft.XMLHTTP'
|
||
|
];
|
||
|
for (var i = 0; i < axs.length; i++) {
|
||
|
try {
|
||
|
var ax = new(window.ActiveXObject)(axs[i]);
|
||
|
return function () {
|
||
|
if (ax) {
|
||
|
var ax_ = ax;
|
||
|
ax = null;
|
||
|
return ax_;
|
||
|
}
|
||
|
else {
|
||
|
return new(window.ActiveXObject)(axs[i]);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
catch (e) {}
|
||
|
}
|
||
|
throw new Error('ajax not supported in this browser')
|
||
|
}
|
||
|
else {
|
||
|
throw new Error('ajax not supported in this browser');
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
http.STATUS_CODES = {
|
||
|
100 : 'Continue',
|
||
|
101 : 'Switching Protocols',
|
||
|
102 : 'Processing', // RFC 2518, obsoleted by RFC 4918
|
||
|
200 : 'OK',
|
||
|
201 : 'Created',
|
||
|
202 : 'Accepted',
|
||
|
203 : 'Non-Authoritative Information',
|
||
|
204 : 'No Content',
|
||
|
205 : 'Reset Content',
|
||
|
206 : 'Partial Content',
|
||
|
207 : 'Multi-Status', // RFC 4918
|
||
|
300 : 'Multiple Choices',
|
||
|
301 : 'Moved Permanently',
|
||
|
302 : 'Moved Temporarily',
|
||
|
303 : 'See Other',
|
||
|
304 : 'Not Modified',
|
||
|
305 : 'Use Proxy',
|
||
|
307 : 'Temporary Redirect',
|
||
|
400 : 'Bad Request',
|
||
|
401 : 'Unauthorized',
|
||
|
402 : 'Payment Required',
|
||
|
403 : 'Forbidden',
|
||
|
404 : 'Not Found',
|
||
|
405 : 'Method Not Allowed',
|
||
|
406 : 'Not Acceptable',
|
||
|
407 : 'Proxy Authentication Required',
|
||
|
408 : 'Request Time-out',
|
||
|
409 : 'Conflict',
|
||
|
410 : 'Gone',
|
||
|
411 : 'Length Required',
|
||
|
412 : 'Precondition Failed',
|
||
|
413 : 'Request Entity Too Large',
|
||
|
414 : 'Request-URI Too Large',
|
||
|
415 : 'Unsupported Media Type',
|
||
|
416 : 'Requested Range Not Satisfiable',
|
||
|
417 : 'Expectation Failed',
|
||
|
418 : 'I\'m a teapot', // RFC 2324
|
||
|
422 : 'Unprocessable Entity', // RFC 4918
|
||
|
423 : 'Locked', // RFC 4918
|
||
|
424 : 'Failed Dependency', // RFC 4918
|
||
|
425 : 'Unordered Collection', // RFC 4918
|
||
|
426 : 'Upgrade Required', // RFC 2817
|
||
|
428 : 'Precondition Required', // RFC 6585
|
||
|
429 : 'Too Many Requests', // RFC 6585
|
||
|
431 : 'Request Header Fields Too Large',// RFC 6585
|
||
|
500 : 'Internal Server Error',
|
||
|
501 : 'Not Implemented',
|
||
|
502 : 'Bad Gateway',
|
||
|
503 : 'Service Unavailable',
|
||
|
504 : 'Gateway Time-out',
|
||
|
505 : 'HTTP Version Not Supported',
|
||
|
506 : 'Variant Also Negotiates', // RFC 2295
|
||
|
507 : 'Insufficient Storage', // RFC 4918
|
||
|
509 : 'Bandwidth Limit Exceeded',
|
||
|
510 : 'Not Extended', // RFC 2774
|
||
|
511 : 'Network Authentication Required' // RFC 6585
|
||
|
};
|