如何将Https代理请求转发到Node中的另一个代理服务器

时间:2019-05-22 13:04:01

标签: node.js sockets https proxy

我正在尝试构建具有以下基本工作流程的中间代理服务:

客户端->我的代理->其他代理服务->目标

然后再次通过链条返回客户端。

我需要从使用我的服务作为代理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输入变量,只是...将其重定向到另一个外部代理服务器,然后通过套接字将响应发送回客户端

0 个答案:

没有答案