我有一台节点服务器,根据最近的一些基础架构更改,我需要确保除到NO_PROXY环境变量中列出的主机的流量外,所有出站请求都通过Squid代理。
设置HTTP_PROXY、HTTPS_PROXY和NO_PROXY似乎不会影响节点服务器的行为,但我需要一种方法来做到这一点,而不必手动编辑库。我有大约10个库,它们可以接触到需要尊重这种代理行为的外部服务。
有没有其他方法可以全局设置代理行为,包括尊重NO_PROXY?
发布于 2020-12-23 09:59:56
不幸的是,Node.js运行时不支持使用开箱即用的环境变量配置HTTP代理(请参阅nodejs/node#8381和nodejs/node#15620)。请求库支持是混合的:
request
does (request/request#1096)node-fetch
not (node-fetch/node-fetch#195) (请参见below)got
does not (sindresorhus/got#79) (见下文)任何提供传递支持环境配置代理的http.Agent
的方法的库,例如:
例如:
import fetch from 'node-fetch';
import ProxyAgent from 'proxy-agent';
const response = await fetch('https://example.com', { agent: new ProxyAgent() });
const body = await response.text();
如果你不能传递一个Agent
,或者根本不能修改代码,你可以考虑使用global-agent
作为一个预加载的模块来代理所有请求(由GLOBAL_AGENT_HTTP_PROXY
环境变量配置):
export GLOBAL_AGENT_HTTP_PROXY=http://proxy.example.com
node --require global-agent/bootstrap mycode.js
或者,如果您的系统支持LD_PRELOAD
或DYLD_INSERT_LIBRARIES
,则可以使用通用代理程序,如ProxyChains-NG (或原始ProxyChains)。
发布于 2018-01-30 00:14:16
为了防止有人到达这里,它似乎已经被添加到https://github.com/request/request/pull/1096中的request.js中了
https://stackoverflow.com/questions/37688508
复制相似问题