Ich möchte einen ausgehenden HTTP-Aufruf von node.js unter Verwendung des Standards tätigen http.Client
. Ich kann den Remote-Server jedoch nicht direkt von meinem Netzwerk aus erreichen und muss einen Proxy verwenden.
Wie kann ich node.js anweisen, den Proxy zu verwenden?
Antworten:
Die Antwort von Tim Macfarlane war in Bezug auf die Verwendung eines HTTP-Proxys nah.
Die Verwendung eines HTTP-Proxys (für nicht sichere Anforderungen) ist sehr einfach. Sie stellen eine Verbindung zum Proxy her und stellen die Anforderung normal, mit der Ausnahme, dass der Pfadteil die vollständige URL enthält und der Host-Header auf den Host festgelegt ist, zu dem Sie eine Verbindung herstellen möchten.
Tim war sehr nah an seiner Antwort, aber er vermisste es, den Host-Header richtig einzustellen.
Für die Aufzeichnung funktioniert seine Antwort mit http://nodejs.org/, aber das liegt daran, dass es ihrem Server egal ist, dass der Host-Header falsch ist.
quelle
404
, und der Zielserver erhält die Anfrage nie.Sie können request verwenden . Ich habe gerade festgestellt, dass es unglaublich einfach ist, Proxy auf node.js zu verwenden, nur mit einem externen "Proxy" -Parameter. Außerdem unterstützt es HTTPS über einen http-Proxy.
quelle
http
undhttps
in meinem Fall, vielen DankEine Sache, die ich eine Weile gebraucht habe, um herauszufinden, verwenden Sie 'http', um auf den Proxy zuzugreifen, selbst wenn Sie versuchen, einen Proxy zu einem https-Server durchzuführen. Dies funktioniert bei mir mit Charles (osx protocol analyzer):
quelle
Wie hier bereits erwähnt, kommt der Proxy-HTTP-Verkehr in ganz normalen HTTP-Anforderungen. Stellen Sie die Anforderung an den Proxy und übergeben Sie die vollständige URL des Ziels als Pfad.
quelle
Ich dachte, ich würde dieses Modul hinzufügen, das ich gefunden habe: https://www.npmjs.org/package/global-tunnel , was für mich großartig funktioniert hat (funktionierte sofort mit allen meinen Code- und Drittanbieter-Modulen mit nur dem folgenden Code).
Wenn Sie dies einmal tun, durchlaufen alle http (und https) in Ihrer Anwendung den Proxy.
Alternativ anrufen
Verwendet die
http_proxy
Umgebungsvariablequelle
Ich habe einen privaten Proxyserver gekauft und nach dem Kauf Folgendes erhalten:
Und ich wollte es benutzen. Die erste und die zweite Antwort funktionierten nur für http (Proxy) -> http (Ziel), ich wollte jedoch http (Proxy) -> https (Ziel).
Und für das https-Ziel ist es besser, den HTTP-Tunnel direkt zu verwenden. Ich habe hier eine Lösung gefunden . Endgültiger Code:
quelle
Das http-Paket 'request' scheint folgende Funktion zu haben:
https://github.com/mikeal/request
Das folgende Anforderungsobjekt 'r' verwendet beispielsweise localproxy, um auf seine Anforderungen zuzugreifen:
Leider gibt es keine "globalen" Standardeinstellungen, sodass Benutzer von Bibliotheken, die diese verwenden, den Proxy nur ändern können, wenn die Bibliothek die http-Optionen durchläuft ...
HTH, Chris
quelle
Grundsätzlich benötigen Sie keine explizite Proxy-Unterstützung. Das Proxy-Protokoll ist ziemlich einfach und basiert auf dem normalen HTTP-Protokoll. Sie müssen nur Ihren Proxy-Host und -Port verwenden, wenn Sie eine Verbindung mit HTTPClient herstellen. Beispiel (aus den Dokumenten von node.js):
Sie stellen also im Grunde eine Verbindung zu Ihrem Proxy her, stellen jedoch eine Anfrage an "http://www.google.com".
quelle
Wenn Sie die Basisberechtigung für Ihren Proxy-Anbieter verwenden müssen, verwenden Sie einfach Folgendes:
quelle
Der Knoten sollte die Verwendung der Umgebungsvariablen http_proxy unterstützen. Sie ist also plattformübergreifend und funktioniert mit Systemeinstellungen, anstatt eine Konfiguration pro Anwendung zu erfordern.
Unter Verwendung der bereitgestellten Lösungen würde ich Folgendes empfehlen:
Coffeescript
Javascript
Verwendung Um die Methode zu verwenden, ersetzen Sie einfach http.get. Beispiel: Im Folgenden wird die Indexseite von Google in eine Datei namens test.htm geschrieben:
quelle
Imskulls Antwort hat fast für mich funktioniert, aber ich musste einige Änderungen vornehmen. Die einzige wirkliche Änderung besteht darin, Benutzername, Passwort und die Einstellung "RejectUnauthorized" auf "false" zu setzen. Ich konnte keinen Kommentar abgeben, also habe ich dies in eine Antwort eingefügt.
Wenn Sie den Code ausführen, erhalten Sie die Titel der aktuellen Geschichten in Hacker News gemäß diesem Tutorial: http://smalljs.org/package-managers/npm/
quelle
Ich denke, es gibt eine bessere Alternative zu den Antworten ab 2019. Wir können das
global-tunnel-ng
Paket verwenden, um den Proxy zu initialisieren und denhttp
oderhttps
basierten Code nicht überall zu verschmutzen . Installieren Sie also zuerst dasglobal-tunnel-ng
Paket:Ändern Sie dann Ihre Implementierungen, um den Proxy bei Bedarf wie folgt zu initialisieren:
quelle
Möglicherweise ist dies nicht der genaue Einzeiler, auf den Sie gehofft haben, aber Sie können einen Blick auf http://github.com/nodejitsu/node-http-proxy werfen, da dies möglicherweise Aufschluss darüber gibt, wie Sie Ihre App mit http verwenden können. Klient.
quelle
http://groups.google.com/group/nodejs/browse_thread/thread/d5aadbcaa00c3f7/12ebf01d7ec415c3?lnk=gst&q=proxy#12ebf01d7ec415c3
Basierend auf den Antworten aus diesem Thread scheint es, als könnten Sie Proxy- Ketten verwenden , um node.js über den Proxyserver auszuführen:
$ proxychains /path/to/node application.js
Persönlich konnte ich keine der Proxy-Chains- Versionen in einer Cygwin / Windows- Umgebung installieren und konnte sie daher nicht testen.
Außerdem wurde über die Verwendung von Connect-Proxy gesprochen, aber ich konnte keine Dokumentation dazu finden.
Kurz gesagt, ich stecke immer noch fest, aber vielleicht kann jemand diese Informationen verwenden, um eine geeignete Lösung zu finden.
quelle
Für die Verwendung eines Proxys mit https habe ich den Rat auf dieser Website (unter Verwendung der Abhängigkeit https-proxy-agent ) ausprobiert und es hat bei mir funktioniert:
http://codingmiles.com/node-js-making-https-request-via-proxy/
quelle
Verwenden Sie 'https-proxy-agent' wie folgt
quelle
Wenn Sie über das Basic http-Authentifizierungsschema verfügen, müssen Sie eine base64-Zeichenfolge erstellen
myuser:mypassword
und dann am Anfang "Basic" hinzufügen. Das ist der Wert des Proxy-Authorization- Headers, hier ein Beispiel:In nodejs können Sie Buffer zum Codieren verwenden
In Browsern können Sie beispielsweise in base64 mit btoa () codieren. Dies ist nützlich bei Ajax-Anforderungen in einem Browser, ohne dass Proxy-Einstellungen eine Anforderung mit Proxy ausführen.
Wie finde ich heraus, welches Schema den Proxyserver akzeptiert?
Wenn wir kein benutzerdefiniertes DNS konfiguriert haben (das so etwas wie ERR_NAME_NOT_RESOLVED auslösen würde), sollte die Antwort (Code 407) bei der Ausführung einer Anforderung in den Antwortheadern angeben, welches http-Authentifizierungsschema der Proxy verwendet.
quelle