用nodejs的http模块实现的http代理服务器,不支持https代理。
http-proxy.js
var http = require('http');http.createServer(function(request, response) { var ip = request.connection.remoteAddress; console.log(ip + ": " + request.method + " " + request.url); console.log(JSON.stringify(request.headers, null, 4)); var proxy = http.request(request.url); proxy.on('response', function(res) { res.on('data', function(chunk) { response.write(chunk, 'binary'); }); res.on('error', function(err) { console.log('proxy error: ' + err.message); response.end(); }); res.on('end', function() { response.end(); }); response.writeHead(res.statusCode, res.headers); }); request.on('data', function(chunk) { proxy.write(chunk, 'binary'); }); request.on('error', function(err) { console.log('request error' + err.message); proxy.end(); }); request.on('end', function() { proxy.end(); });}).listen(8080);console.log("proxy server listen on 8080."); |
node运行此脚本,代理服务器在8080端口开始监听。写个http请求测试如下:
http-proxy-test.js
var request = require('request');process.argv.forEach(function(value, index, array) { console.log(index + ': ' + value);});var url = process.argv.pop();if (!/^http/i.test(url)) { url = 'https://yuweijun.github.io';}request({url: url, proxy: 'http://localhost:8080'}, function(err, response, body) { if (err) { console.log('request err: ' + err.message); } else if (response.statusCode == 200) { console.log(body.length); } else { console.log(JSON.stringify(response, null, 4)); }}); |
在命令行里输入:
node http-proxy-test.js https://yuweijun.github.io |