web-dev-qa-db-fra.com

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

Je prévois de faire une série de requêtes HTTP dans NodeJS via Tor.
Tor utilise SOCKS5, je suis donc parti à la recherche d'un moyen de représenter les requêtes HTTP dans NodeJS.
Je prévois d'utiliser la fonction http.request () par défaut pour effectuer le travail.
Cependant, je n'arrive pas à trouver un moyen d'utiliser un proxy avec cela.
Quelqu'un a suggéré que je puisse 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 n'a pas marché.
Alors, des suggestions?

26
Fredefl

Je viens de publier deux modules qui devraient vous aider à faire cela: socks5 -http -client et socks5 -https -client .

Utilisez simplement ceux-ci au lieu du module http par défaut. 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);
    });
});

Je sais que je réponds à une vieille question, mais il existe une meilleure solution pour cette question, à propos de l'utilisation du proxy sock4 & sock5 dans Node.js. Par souci de simplicité, je vais utiliser le module requête-promesse, mais vous pouvez également utiliser le module requête nue.

Requrement: socks-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)  }
6
Point Networks

Pas une réponse complète, mais vous voudrez peut-être garder un œil sur ces deux modules. 

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

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

Je lui ai envoyé un e-mail lui demandant quand il s'attendait à ce que cela soit terminé et mettra bientôt à jour cet article avec cette information.

2
Hortinstein

Vous devriez essayer avec polipo, ça marche pour moi; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo

0
Tim

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

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

Pour mac (osx avec brasser ) cela a fonctionné comme ceci:

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

Exemple de travail avec request

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

        });
0
Simon Fakir

Si vous êtes sur une machine * nix, vous pouvez utiliser tsocks. Il "résoudra" l'ensemble du processus afin que vous puissiez l'utiliser même pour tout ce qui ne prend pas en charge les mandataires. Cet article a de très bons exemples

En gros, c'est aussi simple que de faire tsocks node myscript.js. Je ne sais pas si cela fonctionne avec tsocks npm start mais vous pouvez l'essayer (npm démarre votre code en tant que sous-processus)

Tout ce dont vous avez besoin est d’abord une configuration (mettez server = 127.0.0.1 à etc/tsocks.conf)

0
Kamil Tomšík