Skip to content

Instantly share code, notes, and snippets.

@petersirka
Created May 14, 2018 14:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petersirka/8bc78f0a4c930096b778907e33f06a50 to your computer and use it in GitHub Desktop.
Save petersirka/8bc78f0a4c930096b778907e33f06a50 to your computer and use it in GitHub Desktop.
HTTP agent as a proxy tunel
function request_proxy(options, callback) {
var proxy = options.proxy;
proxy.path = options.uri.hostname;
proxy.headers = { host: options.uri.hostname };
if (proxy.auth)
proxy.headers['Proxy-Authorization'] = 'Basic ' + U.createBuffer(proxy.auth).toString('base64');
var req = Https.request(proxy);
req.on('error', function(e) {
options.callback(new Error('Proxy error: ' + e.toString()), '', 0, EMPTYOBJECT, proxy.hostname, EMPTYOBJECT);
options.callback = null;
});
req.on('connect', function(res, socket) {
if (res.statusCode === 200) {
options.uri.agent = options.uri.protocol === 'http:' ? new Http.Agent() : new Https.Agent();
options.uri.agent.reuseSocket(socket, req);
options.socket = socket;
callback(options.uri, options);
} else {
options.callback(new Error((res.statusMessage || 'Proxy error') + ': ' + res.statusCode), '', res.statusCode, res.headers, proxy.hostname, EMPTYOBJECT);
options.callback = null;
}
});
req.end();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment