
1. 项目概述为什么我们需要Fiddler如果你在开发、测试或者运维的岗位上待过哪怕只是对网络通信有点好奇大概率都听过“抓包”这个词。简单来说抓包就是截获、查看和分析计算机在网络上发送和接收的数据流。这听起来有点技术宅但它的应用场景无处不在前端开发想看看自己发起的Ajax请求到底带了什么参数、后端收到了什么测试工程师需要验证接口返回的数据是否正确或者模拟一个弱网络环境看看App会不会崩溃安全研究员则通过分析数据包来寻找潜在的安全漏洞。在Windows平台上说到抓包工具Fiddler Classic我们通常直接叫它Fiddler绝对是个绕不开的名字。它不像Wireshark那样底层和全面但正因为其专注于HTTP/HTTPS协议并且提供了极其友好的图形化界面和强大的脚本扩展能力让它成为了Web开发、测试乃至日常问题排查的“瑞士军刀”。很多网络上的教程包括一些抓包工具如Charles的详细教程其核心思想和方法论其实和Fiddler是相通的。今天我就以一个老开发的身份带你从零开始在Windows系统上搞定Fiddler的安装并掌握最核心、最常用的初级使用技巧。我们会避开那些华而不实的复杂功能直奔主题让你在半小时内就能用它解决实际问题。2. Fiddler的安装与环境准备2.1 获取Fiddler安装包首先最推荐的方式是访问Fiddler的官方网站进行下载。直接搜索“Fiddler Classic”或者访问其官方发布页面可以确保你获取到的是最新且安全的版本。虽然网络上流传着一些所谓的“绿色版”或“汉化版”比如你可能搜到过类似ospe抓包工具-1.1.1中文版.rar这样的压缩包但从安全和稳定性角度考虑我强烈建议使用官方原版。第三方修改的版本可能捆绑恶意软件或者存在未知的兼容性问题为了省一点配置时间而引入风险得不偿失。官方安装包是一个标准的.exe文件下载过程非常简单。这里有个小经验如果你所在的网络环境访问国外官网速度较慢可以尝试在白天工作时间下载或者使用一些可靠的国内软件下载站务必甄别选择大站。这和我们下载其他开发工具比如redis windows 下载或者git安装及配置教程windows时遇到的网络问题类似耐心一点总能解决。2.2 执行安装与初始配置运行下载好的安装程序安装过程基本是“下一步”到底。安装路径可以保持默认也可以选择一个你熟悉的目录比如D:\Tools\Fiddler。安装程序会自动处理所有依赖包括必要的.NET Framework组件如果系统没有它会提示或自动安装。安装完成后第一次启动Fiddler你可能会看到几个重要的提示窗口安全警告因为Fiddler会生成自己的根证书并安装到系统中以实现对HTTPS流量的解密所以系统会弹出安全警告。这是正常且必要的步骤选择“是”或“信任”即可。如果不进行这一步你将无法查看HTTPS网站的内容抓到的包全是加密的乱码。代理设置提示Fiddler启动后它会自动将系统的HTTP/HTTPS代理设置为127.0.0.1:8888这是Fiddler默认的监听地址和端口。这意味着你电脑上几乎所有通过系统代理设置的网络流量浏览器、部分应用程序都会先流经Fiddler。你可能会在第一次启动时看到一个提示询问是否允许Fiddler修改代理设置同意即可。注意这个自动设置代理的行为是Fiddler的核心工作原理但也是导致一些“副作用”的根源。例如在抓包工具未关闭情况下关机再开机后如果Fiddler没有自动启动但代理设置可能还被残留就会导致浏览器无法上网出现类似“您的连接不是私密连接”或直接无法访问的情况。解决方法是去系统的Internet选项里关闭代理服务器设置。同样如果你安装了其他代理工具注意这里我们不讨论任何特定工具仅泛指可能会产生冲突需要你手动管理代理配置。2.3 界面初识与必要设置安装完成并启动后你会看到Fiddler的主界面。虽然看起来按钮很多但初级使用我们只需要关注几个核心区域会话列表主窗口这里会实时列出所有被抓到的HTTP/HTTPS请求每一行就是一个会话Session。工具栏包含开始/停止抓包、清除会话等常用按钮。右侧面板这里会显示选中某个会话的详细信息包括请求头、响应头、请求体、响应体等。为了让使用更顺畅我建议先做两个基础设置设置解码点击菜单栏的Tools - Options - HTTPS。确保勾选了Capture HTTPS CONNECTs和Decrypt HTTPS traffic。在下面的下拉菜单中可以选择将证书安装到哪个存储区通常选择Trust Root Certificate即可。然后点击Actions按钮选择Trust Root Certificate和Export Root Certificate to Desktop可选备份证书用。这一步是HTTPS抓包的关键。过滤无关流量可选但推荐默认情况下Fiddler会抓到系统所有的HTTP/HTTPS流量包括Windows更新、杀毒软件等发出的请求干扰很大。我们可以设置过滤器。点击右侧面板的Filters标签页勾选最顶上的Use Filters。在Hosts区域可以选择Show only the following Hosts并输入你想监控的域名如*.example.com或者选择Hide the following Hosts来隐藏Windows更新等无关域。这个功能在排查特定网站问题时非常有用。3. 核心功能解析与初级使用实战3.1 捕获与解读HTTP/HTTPS流量启动Fiddler后确保左上角的状态显示为Capturing捕获中并且右下角的代理图标是亮起的。这时打开你的浏览器访问任何一个网站比如百度。你会发现Fiddler的会话列表里瞬间多了很多行记录。每一行一个会话都包含了几列关键信息# 序列号。Result HTTP状态码比如200成功、404未找到、500服务器内部错误等。这是判断请求成功与否的第一眼依据。Protocol 协议通常是HTTP或HTTPS。Host 请求的主机名域名。URL 请求的具体路径。Body 响应体的大小。Caching 缓存相关的信息。Content-Type 响应内容的类型如text/html,application/json。Process 发出此请求的进程例如chrome:5832表示来自Chrome浏览器。这个功能在区分流量来源时极其有用。点击任意一个会话右侧面板的信息就丰富起来了Inspectors 标签页这是最常用的面板。分为上下两部分上半部分是请求Request下半部分是响应Response。在请求部分你可以查看Headers请求头包含Cookie、User-Agent等信息、TextView或WebForms查看请求参数如果是表单提交WebForms会以更友好的方式展示、Auth认证信息、CookiesCookie详情等。在响应部分同样可以查看Headers响应头、TextView文本响应如HTML、JSON、ImageView如果是图片、WebView渲染HTML等。实操心得刚开始看可能会觉得信息爆炸。我的建议是从一个简单的页面请求开始比如你个人博客的首页。重点关注请求的URL是什么状态码是否是200请求参数Query String或Post Body是什么服务器返回的JSON或HTML结构是怎样的通过对比浏览器开发者工具F12-Network里的信息你能更快地理解Fiddler中各个字段的含义。3.2 断点调试与请求篡改这是Fiddler比浏览器开发者工具更强大的地方之一——你不仅可以看还可以“拦截并修改”请求和响应。设置断点有两种常用方式。全局断点点击菜单栏的Rules - Automatic Breakpoints可以选择Before Requests在请求发出前中断、After Responses在响应返回后中断或Disabled禁用。选择Before Requests后所有流经Fiddler的请求都会被暂停等待你的指令。针对特定请求断点在会话列表里选中一个或多个你想调试的会话右键选择Breakpoint - Before Requests或After Responses。修改请求当请求被断点拦截后该会话在列表中的图标会变成一个红色的Tapped标志。此时在右侧的Inspectors - Request部分你可以直接修改任何内容比如修改Headers里的某个参数或者在WebForms里改掉一个提交的表单值。修改完成后点击绿色的Run to Completion按钮这个被修改过的请求才会被真正发送出去。修改响应类似地设置After Responses断点后你可以在响应返回但尚未到达浏览器前修改响应的内容。比如你可以把一个API返回的JSON数据里的某个字段值改掉然后放行看看前端页面会如何显示。这对于测试前端对不同数据的兼容性非常有用。提示断点功能非常强大但不要长时间开启全局断点否则你的整个网页浏览都会被卡住。用完记得通过Rules - Automatic Breakpoints - Disabled来关闭。对于fiddler过几秒钟就抓不到包了这类问题除了检查代理是否被意外关闭也要排查是否无意中设置了断点但忘了放行。3.3 构造请求与接口测试除了监控和修改现有流量Fiddler还可以让你无中生有手动构造一个HTTP请求并发送这相当于一个轻量级的API测试工具。点击菜单栏的File - New Request或者直接使用快捷键CtrlN会打开一个请求构造器Composer。这个界面很简单请求方法Method下拉选择 GET, POST, PUT, DELETE 等。URL填写完整的请求地址。请求头Headers可以手动添加或从已有的会话中拖拽过来。比如你可以从一个登录成功的请求里把Authorization: Bearer xxxx或Cookie: sessionidxxx这些头信息复制过来用于模拟已登录状态。请求体Body对于POST/PUT请求在这里填写要提交的数据。可以选择Raw直接输入JSON或者使用WebForms模拟表单提交。填写完毕后点击右上角的Execute按钮这个请求就会被发送并且其响应会作为一个新的会话出现在左侧列表中。你可以像分析其他会话一样分析它。应用场景当你需要快速测试一个后端API接口又不想打开Postman或写代码时这个功能就非常方便。特别是当你在浏览器里已经完成了登录可以直接“借用”浏览器的认证信息Cookie等来构造请求测试需要登录权限的接口。3.4 弱网络模拟测试对于移动端开发或测试来说模拟弱网环境是一个刚需。Fiddler内置了一个非常实用的弱网络模拟工具。点击菜单栏的Rules - Performance - Simulate Modem Speeds。勾选后Fiddler就会对所有经过的流量进行限速模拟出古老的56K调制解调器的网速。当然这个预设速度太极端了。我们可以自定义。点击Rules - Customize Rules...或直接按CtrlR这会打开Fiddler的脚本文件CustomRules.js。使用搜索功能CtrlF查找m_SimulateModem。你会找到类似下面的一段代码if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession[request-trickle-delay] 300; // Delay receives by 150ms per KB downloaded. oSession[response-trickle-delay] 150; }这里的数字单位是毫秒每KB。request-trickle-delay是上传延迟response-trickle-delay是下载延迟。通过修改这两个值你可以精确控制网速。例如想模拟一个上行50KB/s下行100KB/s的网络上行速度1秒 1000毫秒 50KB/s 意味着每KB需要 1000/50 20毫秒。所以设置oSession[request-trickle-delay] 20;下行速度1000/100 10毫秒。所以设置oSession[response-trickle-delay] 10;修改后保存文件CtrlS并确保Simulate Modem Speeds是勾选状态规则就会立即生效。这时你再访问网页或使用App就能明显感受到网络变慢了。这个功能对于测试App在弱网下的加载、超时、降级策略等至关重要。4. 进阶技巧与常见问题排查4.1 抓取非浏览器流量如桌面应用、手机AppFiddler默认抓取的是设置为使用系统代理的流量。大部分现代浏览器默认遵从系统代理所以能直接抓到。但很多桌面应用程序如游戏客户端、某些下载工具和移动端App可能不使用系统代理或者使用了自定义的HTTP库如OkHttp需要单独配置。对于Windows桌面应用如果应用不使用系统代理抓包会比较困难。可以尝试在Fiddler的Tools - Options - Connections中勾选Allow remote computers to connect。然后配置该应用程序的网络设置将其HTTP/HTTPS代理手动指向你的电脑IP:8888。但这需要应用本身支持配置代理。对于手机App抓包以Android为例这是更常见的需求。前提是手机和电脑在同一个局域网连接同一个Wi-Fi。在Fiddler中确保Allow remote computers to connect已勾选。查看电脑的局域网IP地址在命令行输入ipconfig找IPv4地址。在手机上配置当前连接的Wi-Fi长按网络 - 修改网络 - 高级选项 - 代理 - 手动。代理服务器主机名填写电脑的IP端口填8888。在手机浏览器中访问http://电脑IP:8888会看到Fiddler的提示页面下载并安装Fiddler的根证书这一步至关重要否则抓不到HTTPS包。配置完成后手机上的网络流量就会经过电脑的Fiddler了。你可以通过Fiddler的Process列看到来自手机的请求或者通过设置Filters只显示手机IP的流量。踩坑记录手机抓包最常见的失败原因就是证书问题。Android高版本7.0以上对证书安装要求更严格用户安装的证书默认不被信任用于安全连接。你可能需要将下载的证书文件.cer移动到系统证书目录或者对App进行特殊配置如果App设置了networkSecurityConfig。iOS也有类似的证书信任流程。如果遇到您的连接不是私密连接这类错误十有八九是证书没装好或没被信任。4.2 使用AutoResponder进行Mock测试AutoResponder自动响应器是另一个神器。它可以让你将特定的网络请求映射到本地文件或另一个URL的响应上从而实现接口Mock模拟。典型场景前端开发需要后端提供一个/api/userinfo接口的数据但后端还没开发完。你可以让后端先给一个JSON样例或者自己写一个。将JSON数据保存为一个本地文件如user_mock.json。在Fiddler中切换到AutoResponder标签页。勾选Enable rules和Unmatched requests passthrough让不匹配的请求正常通过。点击Add Rule。在规则编辑器的上半部分If request matches输入要匹配的请求URL规则例如*://api.example.com/api/userinfo*通配符匹配http和https。在下半部分Then respond with选择Find a file...然后选中你本地的user_mock.json文件。保存规则。现在任何对api.example.com/api/userinfo的请求都不会真正到达服务器而是直接返回user_mock.json文件的内容。你可以用这个功能来模拟服务器错误返回500状态码、模拟网络超时、或者替换页面上的某个图片、JS/CSS文件进行本地调试非常灵活。4.3 常见问题排查速查表在实际使用中你肯定会遇到各种各样的问题。下面我整理了一个快速排查清单问题现象可能原因排查与解决方法抓不到任何包1. Fiddler未处于捕获状态Capturing。2. 系统代理被其他软件如某些代理工具修改。3. 目标应用不走系统代理。1. 检查Fiddler左上角是否显示“Capturing”右下角代理图标是否亮起。2. 检查系统Internet设置中的代理服务器配置确保指向127.0.0.1:8888。3. 尝试用浏览器访问网页看是否能抓到。如果能则是应用本身问题需配置应用代理。抓不到HTTPS包内容为Tunnel to1. Fiddler的HTTPS解密未开启或证书未安装/信任。2. 目标网站使用了证书钉扎Certificate Pinning。1. 检查Tools - Options - HTTPS设置确认已勾选解密HTTPS流量并重新安装/信任根证书。2. 对于证书钉扎的App如很多银行、支付类AppFiddler可能无法解密这是安全机制所致。浏览器提示“您的连接不是私密连接”1. Fiddler的根证书未被浏览器信任。2. Fiddler的证书已过期。1. 在浏览器中访问http://127.0.0.1:8888点击“FiddlerRoot certificate”链接下载并安装证书到“受信任的根证书颁发机构”。2. 在Fiddler中Tools - Options - HTTPS - Actions - Reset All Certificates重置证书。Fiddler关闭后无法上网Fiddler关闭时未自动清除系统代理设置。手动进入系统Internet设置关闭代理服务器选项。也可以在Fiddler关闭前点击File - Exit正常退出它通常会尝试恢复设置。更一劳永逸的方法是在Fiddler的Tools - Options - Connections中取消勾选Act as system proxy on startup但这样就需要手动为需要抓包的程序设置代理。手机无法安装证书1. 手机和电脑不在同一网络。2. 手机浏览器访问的地址不对。3. Android高版本需要特殊处理。1. 确认手机Wi-Fi和电脑在同一局域网。2. 确保在手机浏览器输入的是http://电脑IP:8888。3. 对于Android高版本可能需要将证书安装为系统证书需Root或对测试App进行降级/修改配置。进程Process列显示为空白对应的网络流量不是由Windows上已知的进程直接发起的如来自手机、虚拟机、或某些服务。这是正常现象。你可以通过IP地址、User-Agent或Host来区分流量来源。对于本地进程确保Fiddler以管理员身份运行有时可以显示更多进程信息。5. 脚本扩展与性能考量5.1 使用Fiddler Script进行高级定制Fiddler Script基于JScript .NET是Fiddler的灵魂允许你通过编写脚本来自定义几乎任何行为。我们之前修改弱网延迟的CustomRules.js就是脚本文件。通过它你可以实现自定义规则过滤编写比GUI过滤器更复杂的逻辑来显示/隐藏会话。自动修改请求/响应比如自动为所有请求添加一个特定的Header或者替换响应内容中的某些字符串。性能监控与统计编写脚本计算一组请求的总耗时、平均响应大小等。打开CustomRules.js文件你会看到很多以static function开头的函数这些是Fiddler在处理会话不同阶段会调用的“钩子函数”。例如OnBeforeRequest(oSession): 在请求发出前调用可以在这里修改请求。OnBeforeResponse(oSession): 在响应返回后、发送给客户端前调用可以在这里修改响应。OnPeekAtResponseHeaders(oSession): 刚接收到响应头时调用。一个简单的例子自动为所有发往api.myapp.com的请求加上一个认证Token。static function OnBeforeRequest(oSession: Session) { if (oSession.HostnameIs(api.myapp.com)) { oSession.oRequest.headers[X-Auth-Token] your_secret_token_here; } }修改后保存脚本规则立即生效无需重启Fiddler。这为自动化测试和调试提供了无限可能。5.2 性能影响与最佳实践Fiddler作为一个中间人代理必然会对网络性能产生一定影响尤其是在捕获大量流量或开启解密HTTPS时。以下是一些优化建议按需捕获不需要时点击File - Capture Traffic或按F12停止捕获。这是最简单的提升系统网络速度的方法。使用过滤器务必使用Filters功能只捕获你关心的流量。避免让Fiddler处理海量的无关数据包如视频流、Windows更新这能显著降低CPU和内存占用。定期清理会话长时间抓包会产生成千上万的会话记录占用内存。定期点击工具栏的Remove AllX图标或使用快捷键CtrlX进行清理。谨慎使用断点全局断点会阻塞所有流量只应在调试特定问题时短暂开启。关注“日志Log”标签页如果Fiddler运行异常或性能下降可以查看Log标签页的输出这里常有错误或警告信息是排查问题的第一站。Fiddler是我工具箱里打开频率最高的软件之一。它的入门门槛不高但深挖下去功能极其强大。从最简单的查看请求响应到复杂的接口Mock、性能测试、安全分析它都能胜任。掌握它就相当于拥有了一双透视网络通信的眼睛。希望这篇从安装到初级实战再到进阶避坑的指南能帮你顺利上手这件利器。剩下的就是在实际项目中不断去用它、琢磨它你会发现排查问题的效率会得到质的提升。如果在使用中遇到了上面没覆盖的怪问题不妨去Fiddler的官方论坛或社区看看那里有全球用户积累的宝贵经验。