如果希望由进程环境选择路径,就用 EnvHttpProxyAgent;如果端点应属于客户端配置,则用显式的 Undici ProxyAgent。要把它传给实际请求,仅创建 agent 不会改变任何 fetch 调用:

import { EnvHttpProxyAgent, fetch } from 'undici';

const dispatcher = new EnvHttpProxyAgent();

try {
  const response = await fetch("https://example.com/", {
    dispatcher,
    signal: AbortSignal.timeout(15000),
  });
  console.log(response.status);
  await response.arrayBuffer();
} finally {
  await dispatcher.close();
}

在可使用 Undici 的 ES 模块环境中,将代码保存为 proxy-check.mjs。下面的 POSIX 启动方式提供两种代理路径,并清空绕过列表:

http_proxy=http://203.0.113.10:8080 \
https_proxy=http://203.0.113.10:8080 \
no_proxy= \
node proxy-check.mjs

将文档示例端点换成自己的 HTTP 代理,或HTTP 代理列表中的候选。这些赋值只作用于本次调用,其他 shell 的语法不同。

Undici 8.12.3 中,小写的 http_proxy、https_proxy 和 no_proxy 与对应大写变量同时存在时,小写优先。HTTP 和 HTTPS 目标各用各的设置。只有 HTTP 设置时也可作为 HTTPS 的回退;只有 HTTPS 设置时不会为 HTTP 提供代理。不要假定其他客户端的 ALL_PROXY 约定在这里也适用。

输入这个版本何时读取
HTTP/HTTPS 代理环境变量构造 agent 时选定。修改这些端点后,应创建新的 dispatcher。
环境中的 no_proxy分发请求时会再次检查。
构造参数 noProxy显式固定绕过策略,不再跟随之后的环境变化。

绕过规则可匹配主机和可选端口;单独一个星号会绕过所有请求。代理看不到流量时,应检查目标是否命中了绕过规则。

Windows 主进程处理环境变量名称时不区分大小写,因此 HTTP_PROXY 和 http_proxy 不是独立的值。Node Worker 的环境副本则有文档说明的大小写区分。设置两种拼写来测试优先级前,要考虑这一区别。示例在任务结束后关闭 dispatcher;若连续请求需要相同的已固定端点策略,就应在此期间保留它。

相关文章