非浏览器进程下Fiddler绕过配置失效问题求助
Fiddler绕过列表对.NET 8应用失效的原理与解决方案
一、Fiddler绕过列表的本质
Fiddler在Connections选项中设置的绕过列表,本质是给WinINET代理系统(IE使用的代理框架)添加的规则。只有基于WinINET开发的客户端(如IE、旧版Edge)会直接读取并遵守这个列表。
Chromium内核浏览器(Chrome、新版Edge)之所以能生效,是因为它们自身做了适配——会主动读取系统代理的绕过列表,在内部实现绕过逻辑,和WinINET无关。
二、.NET 8应用失效的核心原因
你通过HTTPS_PROXY环境变量直接将代理指向Fiddler,这种场景下:
- .NET的HttpClient会直接使用这个硬编码的代理地址,完全忽略系统层面的WinINET绕过列表——环境变量设置的代理是强制全局生效的,不会读取系统代理的附加规则。
- .NET默认的
HttpClientHandler或SocketsHttpHandler,不会自动读取系统代理的绕过列表,除非你配置它直接使用系统代理(而非通过环境变量指定)。
三、无需修改应用代码的解决方案
方案1:移除环境变量,让.NET自动使用系统代理
删掉HTTPS_PROXY环境变量,让.NET应用自动读取Fiddler设置的系统代理。.NET 8的HttpClientHandler默认已开启UseSystemProxy,只要你没手动设置Proxy属性,它就会读取WinINET的绕过列表,internal.com的请求就不会经过Fiddler。
方案2:修改Fiddler脚本主动过滤请求
如果必须保留HTTPS_PROXY,可以让Fiddler主动放过目标请求:
- 打开Fiddler,按
Ctrl+R(或点击Rules→Customize Rules)打开脚本编辑器 - 找到
OnBeforeRequest方法,添加以下代码:
if (oSession.HostnameIs("internal.com")) { oSession["x-no-proxy"] = "1"; // 标记为无需代理,直接放行 }
这样Fiddler收到internal.com的请求时,会直接转发到目标服务器,不会显示在会话列表里。
方案3:配置WinHTTP代理(全局生效)
使用netsh命令配置WinHTTP的代理和绕过列表,.NET如果使用WinHttpHandler会读取这个配置:
打开管理员命令提示符,执行:
netsh winhttp set proxy proxy-server="http=127.0.0.1:8888" bypass-list="internal.com;<local>"
注意:WinHTTP的配置和WinINET是分开的,Fiddler默认不会修改它,需要手动执行这个命令。
四、关键结论
- Fiddler的绕过列表只对WinINET客户端和主动适配系统规则的客户端生效,并非所有HTTP客户端都能识别。
- .NET通过环境变量指定代理时,会跳过系统代理的绕过规则,必须通过上述方案调整才能实现过滤。
内容的提问来源于stack exchange,提问作者martinoss
相关产品推荐
相关产品推荐

