问题是这样的:
现在远程有一些代理服务器,然后本地也有一个透明代理服务器,用来在获取服务器列表之后根据需要把代理到本地的http/https转发到相应的远程代理服务器上。
http协议很好实现:
js
var http = require('http'),
op = {
host: '127.0.0.1',
port: 8087,
method: 'GET',
path: 'http://v2ex.com
}
var req = http.request(op, function (res) {
res.on('data', function (chunk) {
console.log('BODY:' + chunk);
});
});
req.on('error', function (e) {
console.log('Error got: ' + e.message);
});
req.end();
然后外面包裹一个http.createServer就可以实现本地代理了。
但是https就比较头疼。首先,如果使用https.createServer作为本地代理需要使用自签名证书,而且我在生成证书之后Chrome访问本地代理时总是提示证书无效(我已经添加了系统的根证书)。其次因为只是透明代理,不需要修改请求,所以我想到了更底层一点的做法:使用net.createServer监听所有的http和https,然后转发。然而问题是我如何将https请求转发到远程https代理上,而且能够很好地处理证书的问题呢?
大家有没有什么想法…