0

我想使用 node.js 设置一个 HTTPS 代理服务器。它需要从浏览器窗口中获取所有 HTTPS 请求。我有一本 mac 书,我已经从 HTTPS 的首选项中配置了代理设置。下面是捕获任何浏览器请求的示例代码,该代码是否正确?我正在使用以下命令生成密钥。

 openssl genrsa -out privatekey.pem 1024
 openssl req -new -key privatekey.pem -out certrequest.csr
 openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

var options = {
https: {
    key: fs.readFileSync('privatekey.pem', 'utf8'),
    cert: fs.readFileSync('certificate.pem', 'utf8')
},
target: {
    https: true
}
};

https.createServer(options,function(request, response) {
console.log(request);
handleRequest(request, response);
}).listen(8877);

所以上面的代码不起作用,任何建议我如何解决这个问题,在此先感谢

4

2 回答 2

0

现在我知道你改变了host,我认为你应该构建一个使用request执行代理的 http 服务器。像这样的request东西(基于文档):

var https = require('https'),
    request = require('request');
var options = {
    https: {
        key: fs.readFileSync('privatekey.pem', 'utf8'),
        cert: fs.readFileSync('certificate.pem', 'utf8')
    },
    target: {
        https: true
    }
};

https.createServer(options,function(req, resp) {
    var otherhost = req.some_method_to_get_host;
    console.log(req);
    req.pipe(request(otherhost)).pipe(resp)
}).listen(8877);
于 2012-10-29T21:59:46.350 回答
0

您可能想查看https://github.com/nodejitsu/node-http-proxy,它是 node.js 的 http 代理。有了它,你所要做的就是

var httpProxy = require('http-proxy');
var options = {
  https: {
    key: fs.readFileSync('privatekey.pem', 'utf8'),
    cert: fs.readFileSync('certificate.pem', 'utf8')
  }
};
var port = SOME_PORT;
var host = 'SOME_HOST';
httpProxy.createServer(port, host, options).listen(8877);
于 2012-10-29T20:45:26.087 回答