You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
879 B
38 lines
879 B
'use strict'; |
|
var url = require('url'); |
|
var getProxy = require('get-proxy'); |
|
var objectAssign = require('object-assign'); |
|
var tunnelAgent = require('tunnel-agent'); |
|
var isObj = require('is-obj'); |
|
|
|
module.exports = function (proxy, opts) { |
|
opts = objectAssign({}, opts); |
|
|
|
if (isObj(proxy)) { |
|
opts = proxy; |
|
proxy = getProxy(); |
|
} else if (proxy === undefined) { |
|
proxy = getProxy(); |
|
} |
|
|
|
if (!proxy) { |
|
return undefined; |
|
} |
|
|
|
proxy = url.parse(proxy); |
|
|
|
var uriProtocol = opts.protocol === 'https' ? 'https' : 'http'; |
|
var proxyProtocol = proxy.protocol === 'https:' ? 'Https' : 'Http'; |
|
var port = proxy.port || (proxyProtocol === 'Https' ? 443 : 80); |
|
var method = [uriProtocol, proxyProtocol].join('Over'); |
|
|
|
delete opts.protocol; |
|
|
|
return tunnelAgent[method](objectAssign({ |
|
proxy: { |
|
host: proxy.hostname, |
|
port: port, |
|
proxyAuth: proxy.auth |
|
} |
|
}, opts)); |
|
};
|
|
|