如何覆盖node.js http以使用代理来处理所有出站请求

时间:2013-05-08 14:12:19

标签: node.js proxy

我最近创建了一个node.js应用程序,该应用程序可以访问社交媒体网站并缓存我们的公共供稿。我正在使用一些现有的npm模块来方便访问社交媒体API。它在我的开发环境中就像一个魅力,但在我们的生产环境中,请求超时是因为它们需要通过代理。

无需修改npm模块,如何使出站请求通过代理?

2 个答案:

答案 0 :(得分:4)

使用http.globalAgent属性。这将允许您拦截流程中运行的所有请求。然后,您可以修改这些请求,以便为代理服务器正确格式化。

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

另一个选择是为该应用程序创建代理例外。

答案 1 :(得分: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
});