Haciendo peticiones http a través de un proxy SOCKS5 en NodeJS

Estoy planeando hacer una serie de solicitudes HTTP en NodeJS aunque Tor.
Tor usa SOCKS5, así que salí y busqué una forma de verificar las solicitudes HTTP en NodeJS.
Estoy planeando la función http.request () predeterminada para hacer el trabajo.
Sin embargo, parece que no puedo encontrar una manera de usar un proxy con eso.
Alguien sugirió que yo podría hacer esto:

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

Pero no funcionó.
Entonces, ¿alguna sugerencia?

Acabo de publicar dos módulos que deberían ayudarte a hacer esto: socks5- http -client y socks5- https -client .

Solo usa esos en lugar del módulo http predeterminado. La API es la misma. Por ejemplo:

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

Sé que estoy respondiendo una pregunta anterior, pero hay una mejor solución disponible para esta pregunta, sobre cómo usar el proxy sock4 y sock5 en Node.js. En aras de la simplicidad, usaré el módulo de solicitud de promesa; sin embargo, también puede usar el módulo de solicitud simple.

Requerimientos: socks-proxy-agent , request-promise

Ejemplo:

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

No es una respuesta completa, pero es posible que desee vigilar estos dos módulos.

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

Se está agregando soporte en: https://github.com/Ayms/node-bot .

Le envié un correo electrónico preguntándole cuándo esperaba que se completara, actualizaré esta publicación pronto con esa información.

Debería intentarlo con polipo, que me funcione; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo

Tuve el mismo problema y usé polipo como proxy entre el nodo y TOR

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

Para mac (osx con cerveza ) funcionó así:

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

Ejemplo de trabajo con solicitud

 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 estás en la máquina * nix, puedes usar tsocks. Se “socksify” todo el proceso para que pueda utilizarlo incluso para cualquier cosa que no es compatible con proxy. Este artículo tiene algunos grandes ejemplos.

Básicamente es tan fácil como hacer tsocks node myscript.js . No estoy seguro de si funciona con tsocks npm start pero podría intentarlo (npm inicia su código como un subproceso)

Todo lo que necesita es algo de configuración primero (ponga el server = 127.0.0.1 a etc/tsocks.conf )