node.js-通过https提出请求时与仅代理服务器进行通信



我正在使用代理服务器发送HTTPS请求。我想仅使用代理服务器来回传递某些信息(未传递到目标服务器)。执行HTTP请求时,可以使用请求标头轻松完成此操作,但是对于HTTPS请求,标题已加密,因此使用请求标头不是一个选项。我的代理服务器使用https时提供以下选项:

将未加密数据发送到代理服务器的唯一点 是使用初始连接方法。这是您必须插入的地方 自定义标题。同样,代理服务器不能注入额外 标题进入最终响应。相反,响应标头是 连接响应后立即注入,看起来像 这个:

http/1.1 200建立的连接
X-Proxyserver-IP:123.456.789.000
最终响应标题&身体

因此,我需要使用连接方法传递标头,然后读取连接响应。https-proxy-agent模块似乎将允许使用连接请求专门发送指定标头。但是,如何在完成预期请求(例如帖子)的同时读取连接响应?

我无法弄清楚如何用request模块或https模块拦截连接响应。

我已经测试了https

const https = require('https');
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
var server = https.createServer(function(req,res){res.end('test');}).listen(3000);

如果您console.log(server._events)

{ connection: [ [Function], [Function] ],
  secureConnection: [ [Function: connectionListener], [Function] ],
  request: [Function],
  tlsClientError: [ [Function: addListener], [Function] ] }

添加以下内容后:

server.on('connection',function(req,socket,head){console.log('CONNECT')})
server.on('secureConnection',function(req,socket,head){console.log('CONNECT (secure)')})
server.on('tlsClientError',function(req,socket,head){console.log('TLS:ERROR')})

我测试了: curl -X CONNECT localhost:3000

在此快速测试中,客户端输出: curl: (52) Empty reply from server

...但是 @ the服务器:

CONNECT
TLS:ERROR

您可以看到其拦截CONNECT(即使您由于测试env。都有TLS错误),

因此,如果您使用(工作)设置执行此操作,则可以在没有TLS:ERROR

的情况下拦截它

对于任何想使用http进行的人,事件是不同的:server.on('connect', ...

最新更新