2013-06-29 8 views
16

Regelmäßige vom Client initiierte Anforderungen an den Node-Server werden in Fiddler ordnungsgemäß erfasst. Anfragen, die vom Knoten an einen Webdienst gesendet werden, werden jedoch nicht erfasst. Es hat nicht geholfen, config für Proxy (127.0.0.1:8888) an die Request-Methode zu übergeben. Wie kann ich die Anforderungsnachrichten über Fiddler weiterleiten?So erfassen Sie HTTP-Nachrichten aus der Request Node-Bibliothek mit Fiddler

var http = require('http'); 
var request = require('request'); 

request.get(webserviceURL, { "auth" : {"user": "user", "pass" = "pass", sendImmediately: true }, 
"proxy" : { "host" : "127.0.0.1", "port" : 8888 }}, 
function (error, response) { console.log("response received"); 
}); 

Anfrage Repo: https://github.com/mikeal/request

+1

Einstellen des Proxy für das Anfrageobjekt * sollte * alles sein, was Sie tun müssen, aber ich sehe keine "Proxy" -Eigenschaft in den Dokumenten? http://nodejs.org/api/http.html#http_http_request_options_callback – EricLaw

+0

Ich verwende das Anfragepaket von Drittanbietern. Link in der Beschreibung. – mupersan82

+0

In der Quelle herumstochern, scheint es, dass die Syntax "Hostname" anstatt "Host" wäre? Oder Sie könnten Proxy als String "http://127.0.0.1:8888" anstatt als Objekt definieren? – EricLaw

Antwort

21

Ich habe gerade versucht, dies selbst zu tun (mit Fiddler und die Anfrage Bibliothek von NPM). Hier ist, wie ich habe es funktioniert:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; // Ignore 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' authorization error 

// Issue the request 
request(
{ 
    method: "GET", 
    uri: "https://secure.somewebsite.com/", 
    proxy: "http://127.0.0.1:8888" // Note the fully-qualified path to Fiddler proxy. No "https" is required, even for https connections to outside. 
}, 
function(err, response, body) { 
    console.log("done"); 
}); 

Dies ist mit Fiddler2 die Standard-Port und Proxy-Einstellungen (und keine Proxy-Authentifizierung).

+2

Vielen Dank. Die Einstellung NODE_TLS_REJECT_UNAUTHORIZED hilft wirklich. Ohne es funktioniert https Anfrage nicht für mich. Nur neugierig, was bedeutet diese Umgebungsvariable? – Habibi

+0

Ich glaube, es erlaubt Node, selbstsignierte SSL-Zertifikate zu verwenden, was normalerweise ein Sicherheitsrisiko darstellt, aber in diesem Fall ist es das, was Sie wollen :) – idolize

5

Fiddler arbeitet Ihre "Internetoptionen" (aus dem Startmenü) "Verbindungen"> "LAN-Einstellungen"> "Proxy-Server" zu seinem Hafen, indem damit alle machen HTTP Verkehr (Clients, die gehorchen diese Einstellung) gehen durch sie hindurch.

Sie sollten Ihre Node.js-Client-Bibliothek auf die Verwendung eines Proxys verweisen, die Einstellungen werden nach dem Start von Fiddler in diesem Dialogfeld angezeigt.

+1

Mache ich das nicht schon? – mupersan82

+0

Haben Sie Ihre Frage bearbeitet oder habe ich einen REAL Blackout erhalten und diesen Teil in Ihrem Codebeispiel verpasst? LOL – Poni

+1

Obwohl Proxy im ersten Post implizit erwähnt wird, löste dieser das Problem für mich, indem er meine Aufmerksamkeit expliziter auf mich zog. Danke @poni. – sfuqua

4

Die Proxy-Option soll eine vollständige URL, wie dies:

proxy : "http://127.0.0.1:8888" 
1

Um dies auf Ad-hoc-Basis zu tun, ohne den Code zu ändern, können Sie Umgebungsvariablen verwenden.

Anfrage Hinsicht:

  • HTTP_PROXY
  • https_proxy
  • NO_PROXY

Proxy Also, nur diese in der Konsole einstellen, bevor Sie Ihren Prozess ausgeführt wird.

Zum Beispiel der Einrichtung http und https-Proxy-Nutzung:

set HTTP_PROXY="http://127.0.0.1:8888" 
set HTTPS_PROXY="http://127.0.0.1:8888" 
set NODE_TLS_REJECT_UNAUTHORIZED=0 

Diese Linie hält Probleme mit SSL durch den Fiedler-Proxy.