1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| 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'
| ]
|
|