我在代理服务器后面的裁剪网络中工作。在我的代码中,我可以使用此线程中提到的方法(How can I use an http proxy with node.js http.Client?)来设置代理。
但问题是,大多数第三方模块没有代理设置,我无法修改代码来添加代理。此外,我的代码可能会在直接连接环境中使用,这意味着我无法在代码中对代理设置进行硬编码。
我知道NPM具有代理的全局设置
npm config set proxy http://proxy.company.com:8080 npm config set https-proxy http://proxy.company.com:8080
但是我没有在Node.js中找到任何类似的配置。
Node.js是否支持全局代理设置,因此我无需更改所有代码并轻松打开和关闭。
答案 0 :(得分:21)
不幸的是,似乎必须在每次调用http.request
时设置代理信息。节点不包括全局代理设置的机制。
NPM上的global-tunnel-ng
module似乎可以解决这个问题:
var globalTunnel = require('global-tunnel-ng');
globalTunnel.initialize({
host: '10.0.0.10',
port: 8080,
proxyAuth: 'userId:password', // optional authentication
sockets: 50 // optional pool size for each http and https
});
通过调用initialize
建立全局设置后,http.request
和requests
库都将使用代理信息。
该模块还可以使用http_proxy
环境变量:
process.env.http_proxy = 'http://proxy.example.com:3129';
globalTunnel.initialize();
答案 1 :(得分:4)
我终于创建了一个模块来解决这个问题(部分)。基本上这个模块重写了http.request
函数,然后添加了代理设置。查看我的博文:https://web.archive.org/web/20160110023732/http://blog.shaunxu.me:80/archive/2013/09/05/semi-global-proxy-setting-for-node.js.aspx
答案 2 :(得分:1)
虽然不是Nodejs设置,但我建议您使用 proxychains ,我觉得这很方便。它可能在您的包管理器中可用。
在配置文件中设置代理后(/etc/proxychains.conf
为我),您可以运行proxychains npm start
或proxychains4 npm start
(即proxychains [command_to_proxy_transparently]
),您的所有请求都将被代理自动。
我的配置设置:
这些是您必须附加的最小设置
## Exclude all localhost connections (dbs and stuff)
localnet 0.0.0.0/0.0.0.0
## Set the proxy type, ip and port here
http 10.4.20.103 8080
(您可以使用nslookup [proxyurl]
)
答案 3 :(得分:1)
您可以尝试使用我的软件包class Wrapper {
let value: AnyObject
init(_ value: AnyObject) {
self.value = value
}
}
,该软件包适用于所有节点版本和大多数http客户端(axios,get,superagent,request等)
通过
安装后 node-global-proxy
全局代理可以以
开头npm install node-global-proxy --save
答案 4 :(得分:0)
在您的组织中用您的ID和密码替换 {userid} 和 {password} 或登录到您的计算机。
npm config set proxy http://{userid}:{password}@proxyip:8080/
npm config set https-proxy http://{userid}:{password}@proxyip:8080/
npm config set http-proxy http://{userid}:{password}@proxyip:8080/
strict-ssl=false