Выполнение http-запросов через прокси-сервер SOCKS5 в NodeJS

Я планирую сделать серию HTTP-запросов в NodeJS, хотя Tor.
Tor использует SOCKS5, поэтому я вышел и искал способ проксировать HTTP-запросы в NodeJS.
Я планирую http по умолчанию.функция request () для выполнения работы.
однако я не могу найти способ использовать прокси-сервер с этим.
кто-то предложил мне сделать это:

var http = require("http");
var options = {
  host: "localhost",
  port: 9050,
  path: "http://check.torproject.org",
  method: 'GET',
  headers: {
    Host: "http://check.torproject.org",
  }
};
var req = http.request(options, function(res) {
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

но это не сработало.
Есть предложения?

6 ответов


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

просто используйте их вместо default http модуль. API тот же самый. Например:

require('socks5-http-client').request(options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
});

Я знаю, что отвечаю на старый вопрос, но есть лучшее решение для этого вопроса, о том, как использовать прокси sock4 & sock5 в узле.js. Для простоты я буду использовать модуль запроса-обещания, однако вы также можете использовать модуль голого запроса.

Requrement: socks-прокси-агент, запрос-обещание

пример:

async function main() {


var proxy = "socks4://1.2.3.4:35618"

var agent = new SocksProxyAgent(proxy);

var options = {
    uri: 'http://targetUrl',
    agent: agent,
    headers: {
        'User-Agent': 'Request-Promise'
    }
}

try {
    var responce = await rp(options)
} catch(err) {
    console.log(err)
}

console.log(responce)  }

не полный ответ, но вы можете следить за этими двумя модулями.

https://github.com/Ayms/node-Tor

поддержка добавляется в: https://github.com/Ayms/node-bot.

Я отправил ему электронное письмо с просьбой, когда он ожидал, что это будет завершено, обновит этот пост в ближайшее время с этой информацией.


Йо должен попробовать с polipo, что работа для меня; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo


если вы на *nix машине, вы можете использовать tsocks. Он будет "socksify" весь процесс, так что вы можете использовать его даже для всего, что не поддерживает прокси вообще. Это статьи есть некоторые большие примеры

в принципе это так же просто, как делать tsocks node myscript.js. Я не уверен, работает ли он с tsocks npm start но вы можете попробовать (npm запускает ваш код как подпроцесс)

все, что вам нужно, это сначала настроить (put server = 127.0.0.1 to etc/tsocks.conf)


у меня была такая же проблема, и я использовал будильник как прокси между узлом и TOR

node (request) - polilp httproxy:8123 -  polipo - tor (socks5:9050).

для mac (osx с brew) он работал так:

brew install polipo tor
tor # start top
polipo socksParentProxy=localhost:9050 # start polipo

рабочий пример с запрос

var request = require('request');
var options = {'url':'https://check.torproject.org/', 'proxy':'http://localhost:8123'}

request(options,
            function (error, response, body) {
            if (error){
                console.log(error);
                return;
            }

            var usingTor = (body.indexOf('Congratulations. This browser is configured to use Tor.')  !== -1);
            expect(usingTor).to.equal(true);   

        });