【问题标题】:Node.js - Communicating with just proxy server while making request over HTTPSNode.js - 通过 HTTPS 发出请求时仅与代理服务器通信
【发布时间】:2017-09-03 06:38:03
【问题描述】:

我正在使用代理服务器发送 https 请求。我想只通过代理服务器来回传递某些信息(不传递给目标服务器)。这可以在进行 HTTP 请求时使用请求标头轻松完成,但对于 HTTPS 请求,标头是加密的,因此不能使用请求标头。我的代理服务器在使用 HTTPS 时提供以下选项:

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

HTTP/1.1 200 连接已建立
X-ProxyServer-IP:123.456.789.000
最终响应标头和正文

所以我需要使用 CONNECT 方法传递标头,并读取 CONNECT 响应。似乎https-proxy-agent 模块将允许指定标头专门与 CONNECT 请求一起发送。但是如何在完成预期请求(例如 POST)的同时读取 CONNECT 响应?

我不知道如何使用request 模块或https 模块拦截 CONNECT 响应。

【问题讨论】:

    标签: node.js proxy node-request https-proxy-agent


    【解决方案1】:

    我已经测试过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)

    ...但是@服务器:

    CONNECT
    TLS:ERROR
    

    你可以看到它拦截了CONNECT(即使你因为测试环境而有tls错误),

    因此,如果您使用(工作)设置执行此操作,您将能够在没有 TLS:ERROR 的情况下拦截它


    对于任何想与 http 一起做的人,事件是不同的:server.on('connect', ...

    【讨论】:

    • 感谢您的回复,但我认为您误解了我的问题。我不控制代理服务器。我是客户端,正在尝试通过 HTTPS(使用节点)发送请求,但在获取请求响应之前拦截 CONNECT 响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多