我正在尝试构建具有以下基本工作流程的中间代理服务:
客户端->我的代理->其他代理服务->目标
然后再次通过链条返回客户端。
我需要从使用我的服务作为代理URL的某人接收请求,对他们的请求进行一些更改,然后将其转发到另一个代理服务。
我已经尝试过使用res.redirect选项,但是这些仅适用于普通的HTTP,而不适用于https。我唯一能够建立的连接是'server.addListener('connect',function)',但是,这不允许我转发请求,并且需要套接字(我对此并不了解很多)
这是我要提出的请求:
request (
{
url: 'https://www.iplocation.net/find-ip-address',
//url : 'http://example.org',
followAllRedirects: true,
proxy: 'http://localhost:7005',
method: "post",
headers: {
'User-Agent': userAgent
}
}, function(err, res, body) {
//console.log(err)
console.log(res);
}
);
这是我用于处理https的服务器功能:
server.addListener('connect', function (req, socket, bodyhead) {
var hostPort = getHostPortFromString(req.url, 443);
var hostDomain = hostPort[0];
var port = parseInt(hostPort[1]);
console.log("Proxying HTTPS request for:", hostDomain, port);
console.log(req);
var proxySocket = new net.Socket();
proxySocket.connect(port, hostDomain, function () {
proxySocket.write(bodyhead);
socket.write("HTTP/" + req.httpVersion + " 200 Connection established\r\n\r\n");
}
);
proxySocket.on('data', function (chunk) {
socket.write(chunk);
});
proxySocket.on('end', function () {
socket.end();
});
proxySocket.on('error', function () {
socket.write("HTTP/" + req.httpVersion + " 500 Connection error\r\n\r\n");
socket.end();
});
socket.on('data', function (chunk) {
proxySocket.write(chunk);
});
socket.on('end', function () {
proxySocket.end();
});
socket.on('error', function () {
proxySocket.end();
});
});
(从另一个stackoverflow答案中复制)。我似乎无法弄清楚如何获取req输入变量,只是...将其重定向到另一个外部代理服务器,然后通过套接字将响应发送回客户端