Node.js http 模块未收到 WS 请求(使用 https-proxy-agent)

标签 node.js websocket https-proxy-agent

这个概念很简单,创建一个将 websocket 请求转发到另一个端口的 http 服务器。

这是我的服务器端的代码:

  http.createServer(onRequest).listen(9999);
  function onRequest(request, response) {
    console.log(request);
    ...
  }

因此,如果 http 服务器收到任何请求,它应该在控制台中打印出该请求。

然后在客户端(也是一个node.js应用程序),代码是:

    var HttpsProxyAgent = require('https-proxy-agent');
    var WebSocket = require('ws');
    ...
    var proxy = `http://${config.proxy.host}:${config.proxy.port}`;
    var options = url.parse(proxy);
    agent = new HttpsProxyAgent(options);
    ws = new WebSocket(target, {
      protocol: 'binary',
      agent: agent
    });

现在,当我使用Charles拦截请求时,客户端确实发出了请求,下面是Charles捕获的curl表单:

curl -H '主机:target.host.com:8080' -X CONNECT 'https://target.host.com:8080 '

问题似乎在于

  function onRequest(request, response) {
    console.log(request);
    ...
  }

实际上没有收到任何 -X CONNECT 'https://proxy.host.com:9999' 请求,或者至少没有打印出来(显然它也不起作用)。

最佳答案

  var server = http.createServer(onRequest).listen(9999);
  server.on('connect', (req, cltSocket, head) => {
    const srvSocket = net.connect('8080', '127.0.0.1', () => {
      cltSocket.write('HTTP/1.1 200 Connection Established\r\n' +
                      'Proxy-agent: Node.js-Proxy\r\n' +
                      '\r\n');
      srvSocket.write(head);
      srvSocket.pipe(cltSocket);
      cltSocket.pipe(srvSocket);
    });
  });

关于Node.js http 模块未收到 WS 请求(使用 https-proxy-agent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843007/

相关文章:

java - 如何使用 Wildfly 设置 javax websockets 的自定义路径

websocket - GraphQL 订阅与 socket.io

javascript - 如何仅在开发环境中使用 proxyAgent

javascript - 对象解构

node.js - 将范围传递给 db.collection.group

javascript - 如何在更改 JSON 文件后将其重新加载为模块

javascript - 使 ajax 响应全局并可在所有路由中使用

php - 我应该在浏览器中使用哪些技术进行二维自上而下的足球模拟?