2013-05-08 33 views
6

Ho recentemente creato un'app node.js che raggiunge i social media e memorizza nella cache i nostri feed pubblici. Sto usando alcuni moduli NPM esistenti per facilitare l'accesso alle API dei social media. Funziona come un incantesimo nel mio ambiente di sviluppo, ma nel nostro ambiente di produzione le richieste scadono perché devono passare attraverso un proxy.Come eseguire l'override di node.js http per utilizzare un proxy per tutte le richieste in uscita

Senza dover modificare i moduli npm come posso far passare le richieste in uscita attraverso un proxy?

risposta

3

Utilizzare la proprietà http.globalAgent. Questo ti permetterà di intercettare tutte le richieste in esecuzione nel tuo processo. È quindi possibile modificare tali richieste per essere formattate correttamente per il server proxy.

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

Un'altra opzione è quella di creare un'eccezione proxy per tale applicazione.

+3

poteva yo d un esempio di utilizzo di http.globalAgent Sono in grado di passare '{host: 'http.proxy.somewhere.com', porta: 1234, percorso: 'http://www.google.com'}' come opzioni e che funziona per la mia richiesta get ma ho provato 'http.globalAgent.options = {host: 'http.proxy.somewhere.com', porta: 1234};' dove il mio proxy aziendale è 'http: // http .proxy.somewhere.com: 1234' e che non ha funzionato – jonnie

+1

Sì, fornire un esempio di routing di tutte le richieste in uscita tramite un proxy con globalAgent. –

2

C'è un modulo NPM per questo:

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 
}); 

O se desideri solo ad alcune richieste proxy, è possibile utilizzare il pacchetto tunnel (che è la forza trainante dietro il tunnel globale sopra):

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 
}); 
Problemi correlati