2012-01-02 12 views
38

Se puede configurar no node.js para reconocer un proxy (como Fiddler, por ejemplo) y enrutar todos los ClientRequest a través del proxy?¿Se puede usar un proxy (como el violín) con ClientRequest de Node.js

Estoy usando un nodo en Windows y me gustaría depurar las solicitudes http de forma muy parecida a como usaría Fiddler para JavaScript en el navegador.

Simplemente sea claro, no estoy tratando de crear un proxy ni solicitudes de proxy recibidas por un servidor. Quiero enrutar las solicitudes hechas por http.request() a través de un proxy. Me gustaría usar Fiddler para inspeccionar tanto la solicitud como la respuesta como lo haría si estuviera realizando la solicitud en un navegador.

Respuesta

23

Para dirigir sus solicitudes a través de clientes-violinista, alterar su opciones a objetos como esto (Ej .: justo antes de crear el http.request):

options.path = 'http://' + options.host + ':' + options.port + options.path; 
options.headers.host = options.host; 
options.host = '127.0.0.1'; 
options.port = 8888; 

myReq = http.request(options, function (result) { 
    ... 
}); 
+0

Esto no funcionó para mí: El evento req 'error' provocó con el siguiente objeto Error, { "error": { "código": "ETIMEDOUT", "errno": "ETIMEDOUT "," syscall ":" connect "}} en una solicitud que sin este aumento se conectó. – Drew

+1

@Drew Eso normalmente significa que su firewall bloqueó la conexión de bucle invertido. – EricLaw

+0

@Drew. También podría ser porque su configuración de violín está escuchando en un puerto diferente en lugar de (por defecto) 8888 – Naraen

6

Si desea Montior reqeusts salientes del nodo puede utilizar el módulo de request

y acaba de establecer la propiedadproxy en las opciones, al igual que

request.post('http://204.145.74.56:3003/test', { 
headers :{ 'content-type' : 'application/octet-stream'}, 
'body' : buf , 
proxy: 'http://127.0.0.1:8888' 
}, function() { 
    //callback 
}); 

8888 es el puerto predeterminado de fiddler.

46

Me parece que lo siguiente es ingenioso. El módulo request lee información de proxy de la variable de entorno de Windows.

Al escribir lo siguiente en el símbolo del sistema de Windows, se configurará durante la vida útil del shell. Solo tiene que ejecutar su aplicación de nodo desde este shell.

set https_proxy=http://127.0.0.1:8888 
set http_proxy=http://127.0.0.1:8888 
set NODE_TLS_REJECT_UNAUTHORIZED=0 
+2

¡Gran solución! Me gusta que no requiera modificar el código. – Sam

+2

Usando bash shell, intercambia 'set' para' export' y funcionará. – mwotton

+0

por algún motivo establecido NODE_TLS_REJECT_UNAUTHORIZED = 1 funciona – Chookoos

4
process.env.https_proxy = "http://127.0.0.1:8888"; 
process.env.http_proxy = "http://127.0.0.1:8888"; 
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 
+0

Un navegador usará el violín como proxy si se está ejecutando, pero no si no se está ejecutando. La solicitud del navegador funciona en ambos casos. ¿Cómo obtengo el mismo comportamiento usando la biblioteca de solicitudes de node.js? – user1738579

Cuestiones relacionadas