nodejs中如何通过代理发送请求

我们一般使用fetch (nodejs@18)或者node-fetch来发送请求,但是请求不会走本机代理,这会导致请求墙外的资源失败。要想在 nodejs 中请求墙外资源,需要通过代理(科学上网)。

node-fetch 支持传入 agent 参数,用来配置代理。https-proxy-agent (opens in a new tab)是一个代理库,可以用来生成 agent

const proxy = "http://127.0.0.1:7890"
const httpsProxyAgent = new HttpsProxyAgent(proxy)
 
fetch("https://www.google.com", {
  agent: httpsProxyAgent,
})

一般 VPN 的代理都是http://127.0.0.1:7890 ,并且 VPN 软件会提供复制代理到命令行的功能,一般复制的命令是export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

所以上面的代码可以改为从环境变量中获取 proxy

const httpsProxyAgent = new HttpsProxyAgent(process.env.http_proxy)

注意,node@18 原生的 fetch 是不支持配置 agent 的。 🤷‍♂️