阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js http ClientRequest connect 事件

      Node.js http ClientRequest connect 事件

      新增于: v0.7.0

      • response < http.IncomingMessage>
      • socket < net.Socket>
      • head < Buffer>

      每次服务器使用 CONNECT 方法响应请求时都会触发。 如果未监听此事件,则接收 CONNECT 方法的客户端将关闭其连接。

      客户端和服务器对演示了如何监听 ‘connect’ 事件:

      const http = require('http');
      const net = require('net');
      const url = require('url');
      
      // 创建 HTTP 隧道代理。
      const proxy = http.createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('响应内容');
      });
      proxy.on('connect', (req, cltSocket, head) => {
        // 连接到原始服务器。
        const srvUrl = url.parse(`http://${req.url}`);
        const srvSocket = net.connect(srvUrl.port, srvUrl.hostname, () => {
          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);
        });
      });
      
      // 代理正在运行。
      proxy.listen(1337, '127.0.0.1', () => {
      
        // 向隧道代理发出请求。
        const options = {
          port: 1337,
          host: '127.0.0.1',
          method: 'CONNECT',
          path: 'nodejs.cn:80'
        };
      
        const req = http.request(options);
        req.end();
      
        req.on('connect', (res, socket, head) => {
          console.log('已连接');
      
          // 通过 HTTP 隧道发出请求。
          socket.write('GET / HTTP/1.1\r\n' +
                       'Host: nodejs.cn:80\r\n' +
                       'Connection: close\r\n' +
                       '\r\n');
          socket.on('data', (chunk) => {
            console.log(chunk.toString());
          });
          socket.on('end', () => {
            proxy.close();
          });
        });
      });
      

      更多内容请参考:Node.js HTTP,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录