2012-01-02 9 views
38

Czy plik node.js może zostać skonfigurowany tak, aby rozpoznawał proxy (na przykład Fiddler) i kierował wszystkie klienty ClientRequest za pośrednictwem serwera proxy?Czy serwer proxy (taki jak skrzypek) może być używany z klientem Node.js ClientRequest

Używam węzła w systemie Windows i chcę debugować żądania http tak, jakbym używał narzędzia Fiddler do obsługi JavaScript w przeglądarce.

Po prostu bądźcie jasne, nie próbuję tworzyć proxy, ani żądań proxy otrzymanych przez serwer. Chcę przekierować żądania wysłane przez http.request() za pośrednictwem serwera proxy. Chciałbym użyć Fiddlera do sprawdzenia zarówno żądania, jak i odpowiedzi, tak jak bym, gdy wykonywałam żądanie w przeglądarce.

Odpowiedz

23

Aby trasie wasze prośby klienta poprzez Skrzypek, zmieniać swoje możliwości przedmiotami tak (np .: tuż przed utworzeniem 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

ta nie działa dla mnie: The req 'błąd' zdarzenie wywołane za pomocą następującego obiektu Error, { "error": { "code": "ETIMEDOUT", "errno": "ETIMEDOUT "," syscall ":" connect "}} na żądanie, które bez tej augmentacji się połączyło. – Drew

+1

@Drew To zazwyczaj oznacza, że ​​zapora blokuje połączenie zwrotne. – EricLaw

+0

@Drew. Może to być również spowodowane tym, że twoja konfiguracja fiddlera nasłuchuje na innym porcie zamiast (domyślnie) 8888 – Naraen

6

Jeśli chcesz Montior wychodzące reqeusts od węzła można użyć modułu

request i po prostu ustawić proxy własność w opcji, jak ten

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 to domyślny port skrzypka.

46

Uważam, że poniższe są fajne. Moduł request odczytuje informacje o serwerze proxy ze zmiennej środowiskowej systemu Windows.

Wpisując następujące polecenie w wierszu polecenia systemu Windows, ustawisz go na czas życia powłoki. Trzeba tylko uruchomić aplikację węzła z tej powłoki.

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

Świetne rozwiązanie! Podoba mi się, że nie wymaga modyfikacji kodu. – Sam

+2

Używając powłoki bash, zamień 'set' na' export' i zadziała. – mwotton

+0

z jakiegoś powodu ustaw NODE_TLS_REJECT_UNAUTHORIZED = 1 działa – 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

Przeglądarka użyje skrzypka jako serwera proxy, jeśli jest uruchomiony, ale nie, jeśli nie jest uruchomiony. Żądanie przeglądarki działa w obu przypadkach. Jak uzyskać to samo zachowanie przy użyciu biblioteki żądań node.js? – user1738579

Powiązane problemy