server.on('connect', function(req, socket) { var tunnelUrl = 'tunnel://' + (/^[^:\/]+:\d+$/.test(req.url) ? req.url : req.headers.host); var options = parseUrl(tunnelUrl); var client = net.connect({ host: '127.0.0.1', port: options.port || 443 }, function() { socket.pipe(client).pipe(socket); socket.write('HTTP/1.1 200 Connection Established\r\nProxy-Agent: whistle/test\r\n\r\n'); }); });
function setHost(fullUrl, opts) { var host = opts.host; if (host || opts.port > 0) { var urlOpts = parseUrl(fullUrl); host = host || urlOpts.hostname; var port = opts.port || urlOpts.port; if (port) { host = host + ':' + port; } fullUrl = fullUrl.replace(/\/\/[^/]+/, '//' + host); } return fullUrl.replace(/^ws/, 'http'); }
http.createServer(function(req, res) { var fullUrl = /^http:/.test(req.url) ? req.url : 'http://' + req.headers.host + req.url; var options = parseUrl(fullUrl); delete options.hostname; options.host = '127.0.0.1'; options.method = req.method; options.headers = req.headers; var client = http.request(options, function(_res) { _res.pipe(res); }); req.pipe(client); })
function proxy(url, callback) { ++count; var options = parseUrl(url); connect(options.hostname, options.port, function(err, socket) { if (err) {
var options = parseUrl(req.url); if (!req.headers.host) { req.headers.host = options.host;