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?
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);
});
});
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) }
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.
Yo devriez essayer avec polipo, qui fonctionnent pour moi; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo
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.1
etc/tsocks.conf
)
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);
});