Node.js - 通过HTTPS发送请求时与代理服务器进行通信
问题描述:
我使用代理服务器发送https请求。我想仅通过代理服务器来传递某些信息(不传递到目标服务器)。在做HTTP请求时,这可以通过请求标头容易地完成,但对于HTTPS请求标头被加密,因此使用请求标头不是选项。Node.js - 通过HTTPS发送请求时与代理服务器进行通信
在该未加密的数据被发送到代理服务器 唯一点是与初始CONNECT方法:我的代理服务器使用HTTPS时提供以下选项。这是您必须插入 自定义标题的位置。同样,代理服务器也不能在最终响应中插入额外的 标头。相反,响应头是 连接响应,它看起来像 此之后立即注射:
HTTP/1.1 200建立的连接
X-访问代理服务器-IP:123.456.789.000
最终响应头&体
所以我需要通过CONNECT方法传递标题,并读取CONNECT响应。看起来https-proxy-agent
模块将允许指定头文件通过CONNECT请求发送。但是,如何在完成预期请求(例如POST)的同时阅读CONNECT响应?
我不知道如何拦截与request
模块或https
模块的CONNECT响应。
答
我已经测试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] ] }
因此添加后如下:curl -X CONNECT localhost:3000
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: (52) Empty reply from server
)
...但@服务器:
CONNECT
TLS:ERROR
正如你可以看到它的拦截CONNECT
(即使你有TLS错误,由于测试ENV),
所以,如果你这样做你的(工作)的设置,你将能够拦截它没有TLS:ERROR
对于任何想要使用http
的人来说,活动是不同的:server.on('connect', ...
感谢您的回复,但我认为您错误地理解了我的问题。我不控制代理服务器。我是客户端,正在尝试通过HTTPS(使用节点)发送请求,但在获取请求响应之前拦截CONNECT响应。 – Joel