| 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' | |
| ]
 |