2013-05-08 11 views
6

最近ソーシャルメディアサイトにアクセスし、公開フィードをキャッシュするnode.jsアプリケーションを作成しました。私はいくつかの既存のnpmモジュールを使用して、ソーシャルメディアAPIへのアクセスを容易にしています。私の開発環境の魅力のように動作しますが、プロダクション環境では、プロキシを経由する必要があるため、要求がタイムアウトしています。node.js httpをオーバーライドしてすべての送信リクエストにプロキシを使用する方法

npmモジュールを変更することなく、送信要求をプロキシ経由で送信する方法を教えてください。

答えて

3

http.globalAgentプロパティを使用します。これにより、プロセスで実行されているすべての要求をインターセプトできます。これらの要求を変更して、プロキシサーバー用に適切な形式にすることができます。

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

別のオプションは、そのアプリケーションのプロキシの例外を作成することです。

+3

よ可能性http.globalAgentを使用した例を示します。{host: 'http.proxy.somewhere.com'、ポート:1234、パス: 'http://www.google.com'} 'を私の会社のプロキシがhttp:// httpであるところで、http://www.globalAgent.options = {host: 'http.proxy.somewhere.com'、port:1234} .proxy.somewhere.com:1234'で動作しませんでした。 – jonnie

+1

はい、すべての発信リクエストを、globalAgentのプロキシ経由でルーティングする例を示してください。 –

2

そのためのNPMモジュールがあります:

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

それとものみプロキシ特定の要求する場合は、あなたがグローバルトンネルの原動力であるトンネルパッケージを(使用することができます上記):

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 
}); 
関連する問題