问题描述
我在代理服务器后面的裁剪网络中工作。在我的代码中,我可以使用此线程中提到的方法(How can I use an http proxy with node.js http.Client?)设置代理。
但是问题是,大多数第三方模块没有代理设置,我无法修改代码来添加代理。此外,我的代码可能在直接连接环境中使用,这意味着我无法在代码中代理设置hard-code。
我知道NPM有一个全局的代理设置
npm config set proxy http://proxy.company.com:8080 npm config set https-proxy http://proxy.company.com:8080
但是我没有在Node.js中找到类似的配置。
Node.js支持全局代理设置,以便我不需要更改所有代码并轻松地打开和关闭。
最佳解决办法
不幸的是,似乎每次调用http.requrest
时都必须设置代理信息。节点不包括全局代理设置的机制。
然而,NPM上的global-tunnel
模块似乎处理了这一点:
var globalTunnel = require('global-tunnel');
globalTunnel.initialize({ host: 'proxy.example.com', port: 8080 });
在通过initialize
的呼叫建立全局设置后,http.request
和requests
库将使用代理信息。
该模块还可以使用http_proxy
环境变量:
process.env.http_proxy = 'http://proxy.example.com:3129';
globalTunnel.initialize();
次佳解决办法
我终于创建了一个模块来解决这个问题(部分)。基本上这个模块重写http.request
功能,添加代理设置然后点火。检查我的博客文章http://blog.shaunxu.me/archive/2013/09/05/semi-global-proxy-setting-for-node.js.aspx
参考文献
注:本文内容整合自google/baidu/bing辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:gxnotes#qq.com(#替换为@)。