Bri*_*ith 5 javascript ssl node.js
我正在尝试将( How to create a simple http proxy in node.js? )上接受的答案从http转换为https。
当我尝试从浏览器访问代理时,服务器退出并抛出此错误:
events.js:171
throw TypeError('listener must be a function');
^
TypeError: listener must be a function
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
var https = require('https');
var fs = require('fs');
var ssl = {
ca: fs.readFileSync("cacert.pem"),
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.pem")
};
https.createServer(ssl, onRequest).listen(3000, '127.0.0.1');
function onRequest(client_req, client_res) {
console.log('serve: ' + client_req.url);
var options = {
hostname: 'www.example.com',
port: 80,
path: client_req.url,
method: 'GET'
};
var ssl = {
ca: fs.readFileSync("cacert.pem"),
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.pem")
};
var proxy = https.request(ssl, options, function(res) {
res.pipe(client_res, {
end: true
});
});
client_req.pipe(proxy, {
end: true
});
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我做了很少的改变,我不知道如何解决这个问题。
有任何想法吗?
看起来您的参数错误https.request(http://nodejs.org/api/https.html#https_https_request_options_callback)。应该只是:
var proxy = https.request(options, function(res) {
res.pipe(client_res, {
end: true
});
});
Run Code Online (Sandbox Code Playgroud)
您的证书信息应包含在链接页面的选项对象中:
var options = {
hostname: 'encrypted.google.com',
port: 443,
path: '/',
method: 'GET',
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
options.agent = new https.Agent(options);
var req = https.request(options, function(res) {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25658 次 |
| 最近记录: |