You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js 18.3 原生fetch如何配置代理发起网络请求

问题根因

Node.js 18 版本内置的原生 fetch 底层基于 undici 实现,不兼容传统 http/https 模块使用的 agent 配置项,传入的 proxy-agent 实例不会被 fetch 识别加载,代理规则完全不生效,请求默认走本机网络出口,所以会返回真实IP。

正确实现方式

不需要使用第三方 proxy-agent 依赖,直接使用 undici 提供的原生 ProxyAgent 即可,Node 18 已内置 undici 依赖,无需额外安装(18.13以下版本如果找不到导出,手动执行npm install undici安装最新版即可)。

全局代理配置

对所有fetch请求生效:

import { ProxyAgent, setGlobalDispatcher } from 'undici';

// 初始化代理实例
const proxyDispatcher = new ProxyAgent('http://80.48.119.28:8080');
// 注册全局网络分发器
setGlobalDispatcher(proxyDispatcher);

(async () => {
    const res = await fetch('https://api.ipify.org?format=json');
    const data = await res.json();
    console.log(data); // 输出代理IP
})();

单请求代理配置

仅对指定请求生效,不影响其他请求:

import { ProxyAgent } from 'undici';

const proxyDispatcher = new ProxyAgent('http://80.48.119.28:8080');

(async () => {
    const res = await fetch('https://api.ipify.org?format=json', {
        dispatcher: proxyDispatcher // 注意配置字段是dispatcher,不是agent
    });
    const data = await res.json();
    console.log(data); // 输出代理IP
})();

注意事项

  • 如果代理需要身份认证,直接在代理地址中拼接认证信息即可,格式为http://用户名:密码@代理地址:端口
  • 不要给原生fetch传agent参数,该参数仅适用于node-fetch等第三方fetch实现,原生fetch不识别该字段

内容的提问来源于stack exchange,提问作者dedLyv22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:06:40