如果您正在开发或测试 Windows 应用程序,并希望查看它们发送的具体 HTTP 请求,Fiddler 将成为您的主要工具。它可以拦截所有流量,允许您实时分析、修改并重放。特别是在处理 UWP 应用程序时,这一点尤为重要,因为它们默认绕过系统代理。
在本指南中,我们将讨论安装、HTTPS 拦截设置、与 UWP 的工作、外部代理的连接以及典型的使用场景——从 API 调试到后台请求监控。
什么是 Fiddler 及其用途
Fiddler 是一个由 Telerik(现为 Progress)开发的 HTTP 代理调试器。它作为本地代理服务器工作:您计算机上的所有 HTTP 和 HTTPS 请求都通过它,您可以实时查看每一个请求。该工具是免费的,存在两个版本——Fiddler Classic(仅限 Windows)和 Fiddler Everywhere(跨平台)。
Fiddler 与浏览器中的 DevTools 有什么不同?浏览器开发者工具仅显示浏览器自身的流量。而 Fiddler 则可以拦截来自您计算机上任何应用程序的请求:桌面程序、系统服务、Windows 后台进程、通过 Wi-Fi 的移动应用程序,以及——尤其重要的是——来自 Microsoft Store 的 UWP 应用程序。
Fiddler 解决的典型任务包括:
- 分析桌面应用程序的 API 请求——程序发送了什么,哪些头部,哪些数据
- 调试自己的代码——查看您应用程序的真实请求,而不是您假设要发送的内容
- 实时修改请求和响应——更改数据以测试边缘案例
- 监控后台活动——程序在您不知情的情况下“拨打”哪些服务器
- 通过代理进行测试——检查应用程序在通过外部代理服务器工作时的行为
- 重放请求——使用更改的参数重新发送拦截的请求
对于与封闭 API 工作的开发人员,Fiddler 特别有价值——例如,逆向工程移动应用程序或桌面客户端的协议。您只需启动程序,点击界面中的所需按钮,即可在 Fiddler 中查看所有请求。
安装和初始设置
安装 Fiddler Classic 大约需要两分钟。请从官方网站 telerik.com/fiddler 下载安装程序并运行。安装后,Fiddler 会自动将自己注册为 Windows 系统代理,端口为 127.0.0.1:8888。
启动后,您将看到主窗口,其中有三个区域:
- 左侧面板(会话)——实时拦截的所有请求列表
- 右上面板——所选请求的详细信息(头部、主体、参数)
- 右下面板——服务器响应
首先要做的是设置过滤器,否则列表中会出现所有 Windows 系统流量(更新、遥测、OneDrive 等),这会使找到所需请求变得困难。请转到右侧的 Filters 选项卡并启用 Use Filters。在 Show only the following Hosts 字段中,指定您感兴趣的域。
Fiddler Classic 的实用快捷键:
F12——启用/禁用流量拦截Ctrl+X——清空会话列表Ctrl+F——按会话搜索R——重放所选请求Shift+Delete——删除选定的会话
我们还建议立即设置会话的自动保存:File → Capture Traffic 和 File → Save → All Sessions。这将允许您稍后返回到记录的流量并离线分析。
拦截 HTTPS 流量:证书设置
默认情况下,Fiddler 仅拦截 HTTP 流量。要处理 HTTPS(这占现代流量的 95% 以上),需要配置 SSL 解密。Fiddler 充当中间人:它生成自己的根证书并用它签署所有 HTTPS 连接。
HTTPS 拦截的逐步设置:
- 打开 Tools → Options → HTTPS
- 勾选 Capture HTTPS CONNECTs
- 勾选 Decrypt HTTPS traffic
- 在下拉列表中选择 ...from all processes
- 点击 Actions → Trust Root Certificate 按钮
- 确认将证书安装到 Windows 系统存储中
- 重启 Fiddler
完成后,在 Protocol 列中,您将看到 HTTPS 而不是 CONNECT,并且可以查看请求和响应的解密内容。
⚠️ 重要:证书安全性
Fiddler 的证书仅安装在当前 Windows 用户的存储中。请勿将证书文件传递给第三方——这将使他们能够拦截您的 HTTPS 流量。调试完成后,可以通过 Tools → Options → HTTPS → Actions → Remove Interception Certificates 删除证书。
一些应用程序使用 Certificate Pinning——它们检查特定的服务器证书,并拒绝通过 Fiddler 工作。在这种情况下,您将在应用程序中看到连接错误。绕过证书固定是一个单独的话题,超出了本文的范围。
如何拦截 UWP 应用程序的流量
UWP(通用 Windows 平台)是来自 Microsoft Store 的应用程序:邮件、地图、电影和电视、Spotify、Netflix 等等。它们的特点是出于安全考虑,它们在隔离的容器(应用容器)中运行,并且不使用系统代理。正因如此,普通的 Fiddler 设置无法拦截它们的流量。
为了解决这个问题,Fiddler 提供了一个特殊工具——AppContainer Loopback Exemption Utility。它将 UWP 应用程序添加到例外列表中,允许它访问本地 Fiddler 代理。
方法 1——通过 Fiddler 界面:
- 在菜单中选择 WinConfig(工具栏上的按钮或 Tools → Win8 Loopback Exemptions)
- 将打开所有已安装的 UWP 应用程序的列表
- 找到所需的应用程序并勾选它
- 点击 Save Changes
- 重启 UWP 应用程序
方法 2——通过命令行(用于自动化):
CheckNetIsolation LoopbackExempt -a -n="Microsoft.WindowsMaps_8wekyb3d8bbwe"
将 Microsoft.WindowsMaps_8wekyb3d8bbwe 替换为所需应用程序的包系列名称。可以通过 PowerShell 命令找到它:
Get-AppxPackage | Select-Object Name, PackageFamilyName | Sort-Object Name
添加例外后,UWP 应用程序将开始通过 Fiddler 发送流量。您将在会话列表中看到它的请求——通常可以通过 User-Agent 或目标主机轻松识别。
💡 提示:UWP 和 HTTPS
要拦截 UWP 应用程序的 HTTPS 流量,仅添加 loopback 例外是不够的。还需要将 Fiddler 证书安装到 Trusted Root Certification Authorities 的 Local Machine 存储中(而不仅仅是当前用户)。可以通过 certmgr.msc 或组策略完成此操作。
过滤器、断点和请求修改
Fiddler 用于调试的三大强大功能是会话过滤、断点和 AutoResponder。我们将逐一讨论。
会话过滤
Filters 选项卡允许您仅显示所需的请求。主要选项包括:
- Show only the following Hosts——按域过滤(例如,
api.example.com) - Show only if URL contains——按 URL 部分过滤
- Show only if response Content-Type——仅 JSON、XML、图像等
- Hide if URL contains——排除噪声请求(例如,
telemetry、analytics)
还可以使用窗口底部的 QuickExec 字符串进行快速命令。例如,select status 404 将突出显示所有 404 错误的请求,而 bold api 将所有包含“api” 的会话加粗。
断点(Breakpoints)
断点允许您在请求或响应发送/接收之前停止并手动修改内容。这类似于代码调试器中的断点,只是针对 HTTP。
- Rules → Automatic Breakpoints → Before Requests——在发送之前停止每个请求
- Rules → Automatic Breakpoints → After Responses——在传递给应用程序之前停止每个响应
- 右键单击会话 → Breakpoint → Break on Request——在特定 URL 上设置断点
当请求被停止时,您可以修改任何头部、请求主体、URL,并点击 Run to Completion 以继续。这对于测试应用程序在修改数据时的行为特别有用。
AutoResponder
AutoResponder 是一个用于替换服务器响应的工具。您创建一个规则:“如果 URL 与模式匹配——返回这个文件/响应”。应用场景包括:
- 在没有真实后端的情况下测试带有 API 占位符的应用程序
- 模拟服务器错误(500、503、超时)
- 替换资源——加载本地版本的 JS/CSS 而不是服务器版本
- 加速开发——缓存对外部 API 的慢请求
通过 Fiddler 连接外部代理
Fiddler 的一个重要功能是以“代理通过代理”(upstream proxy)模式工作。Fiddler 在本地拦截流量,然后通过外部代理服务器将其转发。这允许同时调试请求并更改 IP 地址或地理位置。
何时需要:
- 测试应用程序在通过公司代理工作时的行为
- 检查地理相关内容——应用程序在其他国家的工作情况
- 调试使用代理的应用程序
- 测试具有 IP 限制的 API(IP 白名单)
在 Fiddler Classic 中设置 upstream proxy:
- 打开 Tools → Options → Gateway
- 选择 Manual Proxy Configuration
- 在 Proxy 字段中输入代理地址,格式为
host:port - 如果代理需要身份验证,请提供用户名和密码
- 点击 OK 并重新启动流量捕获
Fiddler 支持 HTTP、HTTPS 和 SOCKS5 代理作为上游代理。对于 SOCKS5,记录格式略有不同:
socks=proxy.example.com:1080
对于测试应用程序的地理相关行为,住宅代理 非常合适——它们使用来自所需国家的真实家庭用户 IP,应用程序将获得与该地区的真实用户相同的响应。这一点很重要,因为 API 根据地理位置返回不同的内容。
如果您在调试时需要快速下载大量数据,可以使用 数据中心代理——它们提供稳定的连接和最低的延迟,这在处理重型 API 时非常方便。
💡 FiddlerScript 用于动态选择代理
通过 FiddlerScript,您可以为不同的主机设置不同的上游代理。例如,将对 api.us-service.com 的请求通过美国代理发送,而其他请求则直接发送:
static function OnBeforeRequest(oSession: Session) {
if (oSession.HostnameIs("api.us-service.com")) {
oSession["x-OverrideGateway"] = "us-proxy.example.com:8080";
}
}
实际场景:解析、API 测试、地理绕过
我们将讨论一些可以通过 Fiddler 轻松解决的具体任务。
场景 1:移动应用程序 API 的逆向工程
您希望自动化应用程序中的操作,但它没有公开的 API。解决方案:在 Android 模拟器或 Windows 客户端上启动应用程序,配置它使用 Fiddler 作为代理,并在执行所需操作时记录所有请求。
记录后,您将获得完整的视图:端点、请求格式、身份验证头、令牌。这些数据可以用于编写自己的客户端或通过脚本进行自动化。
场景 2:市场解析器的调试
在为 Wildberries、Ozon 或其他市场开发解析器时,通常不清楚请求为何被阻止。Fiddler 允许您将通过的浏览器请求与被阻止的解析器请求进行比较,并找到头部、顺序、cookie 或 TLS 指纹的差异。
典型发现:解析器以不同的顺序发送头部,缺少 Accept-Language,或者 User-Agent 包含 Python 版本。修正解析器代码中的这些细节可以降低被阻止的可能性。
场景 3:测试地理相关内容
如果您的应用程序向来自不同国家的用户显示不同的内容,则需要使用来自这些国家的真实 IP 进行测试。配置 Fiddler 使用来自所需地区的上游代理,启动应用程序——您将看到该国家用户所见的内容,以及所有请求的完整日志。
场景 4:监控应用程序的后台活动
想知道已安装程序“拨打”了哪些电话?启动 Fiddler,启动程序,等待 5-10 分钟。会话列表中将出现程序访问的所有主机。这对于审核第三方软件的安全性、检查遥测或不必要的连接非常有用。
场景 5:导出请求以重放
Fiddler 允许将拦截的请求导出为 cURL 格式,可以直接在终端中运行或粘贴到 Postman 中。右键单击会话 → Copy → cURL Request。这对于将请求传递给同事或记录 API 非常方便。
Fiddler Classic vs Fiddler Everywhere:选择哪个
Telerik 支持两个版本的产品,选择它们之间并不总是显而易见。我们将讨论关键差异。
| 参数 | Fiddler Classic | Fiddler Everywhere |
|---|---|---|
| 平台 | 仅限 Windows | Windows、macOS、Linux |
| 价格 | 免费 | 付费订阅(有免费计划) |
| UWP 支持 | 是(通过 WinConfig) | 有限 |
| FiddlerScript | 是(JScript.NET) | 否(使用规则) |
| 界面 | 过时,但功能齐全 | 现代,方便 |
| 协作 | 否 | 是(云集合) |
| 扩展性 | .NET 插件 | 有限 |
| 拦截系统流量 | 完全 | 完全 |
何时选择 Fiddler Classic:您仅在 Windows 上工作,需要处理 UWP 应用程序,使用 FiddlerScript 进行自动化,或者您需要完全免费的无限制版本。
何时选择 Fiddler Everywhere:您在 macOS 或 Linux 上工作,需要现代界面,重视团队协作与共享请求集合,或者希望与 CI/CD 流水线集成。
还值得提及替代方案:Charles Proxy(付费,在 macOS 上流行)、mitmproxy(免费、控制台、非常灵活)、Wireshark(在数据包级别工作,而不是 HTTP)。每个工具都有其优点,但对于大多数 Windows 应用程序调试任务,Fiddler Classic 仍然是最佳选择。
常见问题及解决方案
在使用 Fiddler 时,偶尔会出现一些常见问题。以下是最常见的问题及其解决方案。
问题:启用 Fiddler 时应用程序无法工作
原因:证书固定、应用程序中硬编码的代理,或应用程序不信任 Fiddler 的证书。解决方案:
- 将 Fiddler 的证书安装到 Local Machine → Trusted Root 存储中
- 检查应用程序是否使用证书固定
- 将主机添加到 SSL 例外:Tools → Options → HTTPS → Skip Decryption for following hosts
问题:关闭 Fiddler 后互联网无法工作
Fiddler 在意外关闭时未能移除系统代理。解决方案:打开 Windows 设置 → 网络 → 代理 并禁用手动代理。或者再次启动 Fiddler 并正常关闭。
问题:仅显示 CONNECT 隧道,但不显示 HTTPS 内容
HTTPS 拦截未配置。请返回证书设置部分,确保勾选了 Decrypt HTTPS traffic,并且证书已安装在系统存储中。
问题:UWP 应用程序的流量未出现在 Fiddler 中
此应用程序未添加 loopback 例外。使用 WinConfig(在 UWP 部分描述)并在添加例外后重启应用程序。
问题:上游代理无法工作(连接错误)
请检查:代理地址和端口的正确性、用户名/密码的准确性、代理服务器的可用性(尝试直接连接而不使用 Fiddler)。还要确保代理支持所需的协议——并非所有 HTTP 代理都支持 HTTPS 隧道。
结论
Fiddler 是所有处理 Windows 应用程序 HTTP 流量的用户不可或缺的工具。它允许您实时查看所有请求,实时修改它们,测试应用程序在不同条件下的行为,并解决浏览器 DevTools 无法完成的任务。通过 loopback 例外机制对 UWP 应用程序的支持尤其珍贵——这是大多数替代品所没有的独特机会。
对于测试应用程序的地理相关行为或通过外部代理检查工作——在 Fiddler 中配置上游代理。如果您需要来自特定国家的真实 IP 进行准确测试,请关注 住宅代理——它们提供尽可能真实的地理位置和最低的被测试服务阻止的风险。
从 Fiddler Classic 开始——它是免费的,文档齐全,覆盖 90% 的 Windows 调试任务。随着需求的增长,可以转向 Fiddler Everywhere 或通过像 mitmproxy 这样的专业工具补充工作流程,以实现更灵活的自动化。
```