2013-05-08 11 views
6

Niedawno utworzyłem aplikację node.js, która dociera do serwisów społecznościowych i buforuje nasze publiczne pliki. Używam niektórych istniejących modułów npm, aby ułatwić dostęp do api mediów społecznościowych. Działa to jak urok w moim środowisku programistycznym, ale w naszych żądaniach dotyczących środowiska produkcyjnego upływają limity czasowe, ponieważ muszą przejść przez proxy.Jak zastąpić plik node.js http, aby użyć proxy dla wszystkich żądań wychodzących

Bez konieczności modyfikowania modułów npm, w jaki sposób mogę realizować żądania wychodzące przez proxy?

Odpowiedz

3

Użyj właściwości http.globalAgent. Umożliwi to przechwycenie wszystkich żądań uruchomionych w procesie. Następnie możesz zmodyfikować te żądania, aby były poprawnie sformatowane dla serwera proxy.

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

Inną opcją jest stworzenie wyjątku proxy dla tej aplikacji.

+3

może yo Podaj przykład użycia http.globalAgent Jestem w stanie przekazać '{host: 'http.proxy.somewhere.com', port: 1234, ścieżka:" http://www.google.com "}' jako opcje i działa na własne żądanie pobierania, ale próbowałem 'http.globalAgent.options = {host: 'http.proxy.somewhere.com', port: 1234};' gdzie mój prokurent firmy jest 'http: // http .proxy.somewhere.com: 1234' i to nie zadziałało – jonnie

+1

Tak, proszę podać przykład routingu wszystkich żądań wychodzących za pośrednictwem proxy z globalAgent. –

2

Jest moduł npm na to:

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

Lub jeśli chcesz tylko proxy pewnych wniosków, można użyć pakietu tunelu (co jest siłą napędową światowego tunelu powyżej)

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 
}); 
Powiązane problemy