如何在Fiddler中捕获Next.js路由处理器的全部请求流量
Next.js路由处理器外部API请求的Fiddler拦截方案
一、修正全局代理配置(针对Node.js环境)
你之前设置的http_proxy环境变量无法生效,核心原因是Node.js默认的HTTP客户端(比如Next.js内置的undici fetch)不会自动读取这些系统级代理变量。以下是两种全局生效的配置方式:
1. 使用global-agent强制全局代理
这个包能让Node.js环境下所有HTTP/HTTPS请求自动走代理,无需修改单个请求代码:
- 安装依赖:
npm install global-agent --save-dev - 在Next.js项目的入口文件(比如
next.config.js或自定义server脚本)添加初始化代码:import { bootstrap } from 'global-agent'; bootstrap(); - 启动项目时使用专用环境变量指定代理:
cross-env GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8888 GLOBAL_AGENT_HTTPS_PROXY=http://127.0.0.1:8888 NODE_TLS_REJECT_UNAUTHORIZED=0 next dev
2. 针对undici fetch的全局配置
如果你的项目用的是Next.js 13+ App Router,路由处理器默认使用undici fetch,可以直接在next.config.js中配置全局代理:
module.exports = { serverRuntimeConfig: { undici: { proxy: 'http://127.0.0.1:8888', }, }, };
启动时仍需关闭HTTPS证书校验:
cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 next dev
二、工具替代方案
如果Fiddler的配置始终达不到预期,可以试试这些更适配Node.js的代理工具:
- Charles Proxy:对后端服务请求的捕获支持更友好,开启系统全局代理后,大部分Node.js HTTP客户端会自动继承代理设置,无需额外配置代码。
- Mitmproxy:开源命令行代理工具,启动后通过环境变量指定代理即可捕获所有请求,支持灵活的流量规则自定义。启动命令:
之后用你原来的环境变量命令启动Next.js即可。mitmproxy --listen-port 8888
三、关键排查点
- 确认Fiddler已开启HTTPS解密:在
Tools > Options > HTTPS中勾选Decrypt HTTPS traffic,并信任Fiddler的根证书。 - 检查路由处理器中的API请求是否为绝对路径:如果用相对路径,Next.js可能会将其解析为内部路由,不会触发外部代理请求。
- 验证Node.js版本:建议使用v18及以上版本,旧版本对代理环境变量的支持存在兼容性问题。
内容的提问来源于stack exchange,提问作者robr
相关产品推荐
相关产品推荐

