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

非浏览器进程下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主动放过目标请求:

  1. 打开Fiddler,按Ctrl+R(或点击Rules→Customize Rules)打开脚本编辑器
  2. 找到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:40:13