Faire des requêtes http via un proxy SOCKS5 dans NodeJS

j'ai l'intention de faire une série de requêtes HTTP dans NodeJS though Tor.

Tor utilise SOCKS5 alors je suis sorti et j'ai cherché un moyen de Proxifier les requêtes HTTP dans NodeJS.

J'ai prévu le http par défaut.demande() pour faire le travail.

Cependant, je n'arrive pas à trouver un moyen d'utiliser un proxy.

Quelqu'un a suggéré que je pourrais faire ceci:

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);
  });
});

Mais ça ne fonctionne pas.

Alors, des suggestions?

25
demandé sur Fredefl 2012-07-18 00:13:57

6 réponses

je viens de publier deux modules qui devraient vous aider à faire ceci: socks5 - httpclient et socks5 -httpsclient.

il suffit de les utiliser à la place de la valeur par défaut http module. L'API est la même. Par exemple:

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);
    });
});
27
répondu Matthew Caruana Galizia 2013-03-05 01:33:44

je sais que je réponds à une vieille question mais il y a une meilleure solution disponible pour cette question, sur la façon d'utiliser le proxy sock4 & sock5 dans le noeud.js. Par souci de simplicité, j'utiliserai le module request-promise mais vous pouvez aussi utiliser le module request bare.

Requrement: chaussettes-proxy-agent,demande-promesse

Exemple:

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)  }
4
répondu Point Networks 2018-02-17 12:35:29

Pas de réponse complète, mais vous pouvez garder un oeil sur ces deux modules.

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

Support est ajouté dans: https://github.com/Ayms/node-bot.

je lui ai envoyé un email demandant quand il s'attendait à ce que ce soit complet, mettra à jour ce post bientôt avec cette information.

2
répondu Hortinstein 2012-08-14 20:32:26

Yo devriez essayer avec polipo, qui fonctionnent pour moi; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo

0
répondu Tim 2015-07-22 05:35:25

Si vous êtes sur *nix machine, vous pouvez utiliser tsocks. Il va "socksifier" l'ensemble du processus de sorte que vous pouvez l'utiliser même pour tout ce qui ne supporte pas les mandataires du tout. Ce article a quelques grands exemples

en gros, c'est aussi facile que de faire tsocks node myscript.js. Je ne suis pas sûr si cela fonctionne avec tsocks npm start mais vous pouvez l'essayer (mnp commence votre code comme un sous-processus)

vous N'avez besoin que d'un peu de configuration (mettez server = 127.0.0.1etc/tsocks.conf)

0
répondu Kamil Tomšík 2018-07-17 07:40:10

j'ai eu le même problème et utilisé polipo comme mandataire entre le noeud et TOR

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

pour mac (osx avec brew), il a travaillé comme ceci:

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

exemple demande

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);   

        });
-1
répondu Simon Fakir 2016-09-14 09:25:09