2013-05-08 3 views
6

Ich habe vor kurzem eine node.js App erstellt, die auf Social-Media-Sites zugreift und unsere öffentlichen Feeds zwischenspeichert. Ich verwende einige vorhandene npm-Module, um den Zugriff auf die Social-Media-APIs zu erleichtern. Es funktioniert wie ein Zauber in meiner Entwicklungsumgebung, aber in unserer Produktionsumgebung gibt es Zeitüberschreitungen, weil sie einen Proxy durchlaufen müssen.So überschreiben Sie node.js http, um einen Proxy für alle ausgehenden Anfragen zu verwenden

Ohne die npm-Module zu modifizieren, wie kann ich die ausgehenden Anfragen über einen Proxy gehen lassen?

Antwort

3

Verwenden Sie die http.globalAgent-Eigenschaft. Auf diese Weise können Sie alle Anforderungen abfangen, die in Ihrem Prozess ausgeführt werden. Sie können diese Anforderungen dann so ändern, dass sie für den Proxy-Server ordnungsgemäß formatiert sind.

http://nodejs.org/api/http.html#http_http_globalagent

Eine weitere Option ist es, eine Proxy-Ausnahme für die Anwendung zu erstellen.

+3

konnte yo Ich gebe ein Beispiel für die Verwendung des http.globalAgent Ich bin in der Lage zu übergeben '{Host: 'http.Proxy.Somewhere.com', Port: 1234, Pfad: 'http://www.google.com'}' als Optionen und das funktioniert für meine eigene Get-Anfrage, aber ich habe versucht "http.globalAgent.options = {Host: 'http.Proxy.Somewhere.com', Port: 1234};' wo mein Firmen-Proxy ist 'http: // http .proxy.somewhere.com: 1234' und das hat nicht funktioniert – jonnie

+1

Ja, bitte geben Sie ein Beispiel für das Routing aller ausgehenden Anfragen über einen Proxy mit globalAgent. –

2

Es ist ein npm Modul dafür:

https://www.npmjs.com/package/global-tunnel

var globalTunnel = require('global-tunnel'); 

globalTunnel.initialize({ 
    host: '10.0.0.10', 
    port: 8080, 
    sockets: 50 // optional pool size for each http and https 
}); 

Oder wenn Sie nur auf Proxy bestimmte Anfragen möchten, können Sie den Tunnel-Paket verwenden (das ist die treibende Kraft hinter dem globalen Tunnel oben):

https://www.npmjs.com/package/tunnel

var tunnel = require('tunnel'); 

// create the agent 
var tunnelingAgent = tunnel.httpsOverHttps({ 
    proxy: { 
    host: 'localhost', 
    port: 3128 
    } 
}); 

var req = https.request({ 
    host: 'example.com', 
    port: 443, 
    // pass the agent in your request options 
    agent: tunnelingAgent 
}); 
Verwandte Themen