我正在使用代理服务器发送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', ...