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?
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) }
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.
Vous devriez essayer avec polipo, ça marche pour moi; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo
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);
});
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
)