nodejs. Как отправить http-запрос через туннель HTTP CONNECT?

#node.js #sockets

#node.js #сокеты

Вопрос:

Есть пример использования туннеля HTTP CONNECT из node.js документация.

   var options = {
    port: 1337,
    hostname: '127.0.0.1',
    method: 'CONNECT',
    path: 'www.google.com:80'
  };

  var req = http.request(options);
  req.end();

  req.on('connect', (res, socket, head) => {
    console.log('got connected!');

    // make a request over an HTTP tunnel
    socket.write('GET / HTTP/1.1rn'  
                 'Host: www.google.com:80rn'  
                 'Connection: closern'  
                 'rn');
    socket.on('data', (chunk) => {
      console.log(chunk.toString());
    });
    socket.on('end', () => {
      proxy.close();
    });
  });
  

Есть ли способ использовать сокет с установленным туннелем с http-библиотекой вместо того, чтобы передавать тело http-запроса через сокет самостоятельно (через сокет.написать)?

Ответ №1:

Я не думаю, что обычная http библиотека поддерживает прокси, поэтому вам придется реализовать это самостоятельно.

request Пакет (построенный поверх http ) немного упростит задачу, хотя:

 const request = require('request');

request({
  url    : 'http://www.google.com',
  proxy  : 'http://localhost:1337'
  tunnel : true
}, (err, res, body) => {
  ...
});
  

Указав tunnel : true , он также будет туннелировать обычные HTTP-запросы.