一、Fiddler简介与实现原理
1.1 工具定位与核心价值
Fiddler是一款功能强大的HTTP/HTTPS调试代理工具,以中间人代理模式工作,能够捕获、分析、修改客户端与服务器之间的所有网络流量。其核心价值在于:
全链路可见性:实时监控HTTP/HTTPS请求与响应细节,包括 headers、body、Cookie、缓存等;
灵活的流量控制:支持断点调试、请求重放、数据篡改,助力接口测试与问题定位;
多场景适配:覆盖Web端、移动端(Android/iOS)抓包,支持弱网模拟、性能分析、安全测试等测试场景。
1.2 工作原理
Fiddler通过以下流程实现流量拦截与分析:
代理服务器配置:启动后自动将系统代理设置为 127.0.0.1:8888(默认端口),所有通过系统代理的流量(如浏览器、APP)均会经过Fiddler;
流量转发与拦截:客户端请求先发送至Fiddler,Fiddler再转发至目标服务器;服务器响应同样经Fiddler返回给客户端,过程中可拦截、修改数据;
HTTPS解密机制:通过生成并安装Fiddler根证书,伪造服务器证书实现HTTPS流量解密,支持查看加密内容(需客户端信任根证书)。
注意:Fiddler退出时会自动注销系统代理,若异常退出导致网络异常,需重启Fiddler或手动清除代理设置。
二、安装与环境配置
2.1 版本选择与下载
Fiddler Classic:免费Windows版,功能全面,适合个人测试(官网下载);
Fiddler Everywhere:跨平台(Windows/macOS/Linux),支持团队协作,免费试用期30天,付费订阅制。
本文以 Fiddler Classic 2025版 为例,其新增 AI智能过滤(自动识别目标API特征,效率提升300%)和 自定义webhook集成(支持Slack、Teams及第三方系统告警)。
2.2 Windows安装步骤
运行安装包 FiddlerSetup.exe,按向导完成安装(默认路径 C:Program FilesFiddler);
首次启动后,进入 Tools > Options > HTTPS,勾选 Decrypt HTTPS traffic,点击 Actions > Trust Root Certificate 安装根证书(一路点击“是”完成信任);
配置代理端口:Tools > Options > Connections,设置 Fiddler listens on port: 8888,勾选 Allow remote computers to connect(允许远程设备连接,如手机);
重启Fiddler使配置生效。
2.3 移动端抓包配置(Android/iOS)
前提条件
手机与电脑连接同一局域网;
电脑关闭防火墙或允许Fiddler端口(8888)入站规则。
Android配置
获取电脑局域网IP:cmd > ipconfig,记录IPv4地址(如 192.168.1.100);
手机连接WiFi,长按网络名称进入“修改网络”,设置代理为 手动,输入电脑IP和端口8888;
手机浏览器访问 http://[电脑IP]:8888,点击 FiddlerRoot certificate 下载证书,安装至“受信任的根证书颁发机构”;
打开APP操作,Fiddler即可捕获手机流量。
iOS配置
同Android步骤1-2设置代理;
手机Safari访问 http://[电脑IP]:8888,下载证书;
进入 设置 > 通用 > VPN与设备管理,信任Fiddler证书;
进入 设置 > 通用 > 关于本机 > 证书信任设置,开启Fiddler证书信任。
三、核心功能详解
3.1 界面布局与基础操作
Fiddler主界面分为四部分:
| 区域 | 功能描述 |
|---|---|
| 工具面板 | 包含抓包开关(Capture Traffic)、清除会话(Clear Cache)、重放请求(Replay)等快捷按钮 |
| 会话面板 | 左侧列表展示所有捕获的请求,包含状态码、URL、方法、大小等关键信息,支持排序与筛选 |
| 监控面板 | 右侧详情页,包含Inspectors(请求/响应详情)、AutoResponder(自动响应)、Timeline(时间轴)等标签 |
| 状态面板 | 底部显示抓包统计(如请求数、流量大小),支持QuickExec命令行(如 cls 清屏、bpu 设置断点) |
3.2 会话分析:Inspectors面板
选中会话后,通过Inspectors面板查看详细数据:
请求(Request):
Headers:查看请求行(Method、URL、Protocol)、请求头(Host、User-Agent、Cookie等);
WebForms:解析POST表单数据(application/x-www-form-urlencoded 格式);
JSON/XML:格式化展示JSON/XML类型的请求体,支持折叠与搜索;
响应(Response):
TextView:显示响应正文(文本类型),支持解码(如GZIP);
ImageView:预览图片响应(JPG/PNG等);
Statistics:统计请求耗时(DNS解析、TCP连接、响应时间等)。
3.3 过滤器(Filters):精准定位目标请求
通过 Filters 标签配置过滤规则,减少无关流量干扰:
Host过滤:Show only the following Hosts,输入目标域名(如 api.xxx.com),多个域名用分号分隔;
URL过滤:Show only if URL contains,输入关键词(如 /comment/)定位特定接口;
状态码过滤:Response Status Code,筛选指定状态码(如 200、404);
进程过滤:Client Process,选择特定进程(如浏览器、APP)的流量。
技巧:配置完成后点击 Actions > Run Filterset Now 生效,支持保存/加载过滤规则。
3.4 请求与响应回放(Replay)
单会话回放:选中会话,按 R 键或点击工具栏 Replay 按钮,可重复发送请求;
多会话回放:按住 Ctrl 选中多个会话,右键选择 Replay > Reissue Sequentially(顺序回放)或 Reissue and Edit(回放并编辑);
场景应用:验证接口幂等性(重复提交是否异常)、压力测试(短时间多次回放)。
3.5 断点调试:修改请求与响应
Fiddler支持在请求发送前(Before Requests)或响应返回后(After Responses)设置断点,修改数据:
1. 请求前断点(修改请求参数)
全局断点:Rules > Automatic Breakpoints > Before Requests,所有请求将被拦截;
条件断点:在QuickExec命令行输入 bpu [URL](如 bpu https://api.xxx.com/login),仅拦截目标URL请求;
操作步骤:
触发请求后,Fiddler会话列表中请求显示为红色暂停图标;
右侧 Inspectors > Request > WebForms 修改参数(如将 price=100 改为 price=1);
点击 Run to Completion 发送修改后请求。
2. 响应后断点(修改响应数据)
全局断点:Rules > Automatic Breakpoints > After Responses;
条件断点:命令行输入 bpafter [URL];
应用场景:模拟后端异常响应(如将 200 OK 改为 500 Internal Server Error),测试前端容错逻辑。
3.6 数据导出与Jmeter集成
1. 基础数据导出
会话保存:选中会话,File > Export Sessions > Selected Sessions,支持导出为SAZ(Fiddler专用格式)、CSV、HTML等;
请求详情导出:右键会话 Copy > Just URL(复制URL)、Headers Only(复制请求头)等。
2. 导出Jmeter脚本(.jmx)
通过插件实现Fiddler会话直接导出为Jmeter脚本,步骤如下:
下载Jmeter导出插件(JmeterExporter.dll、JmeterExporter.pdb),放入Fiddler安装目录 ImportExport 文件夹;
重启Fiddler,选中目标会话,File > Export Sessions > Selected Sessions > JMeter,保存为 .jmx 文件;
打开Jmeter,导入 .jmx 文件,自动生成HTTP请求、头管理器等组件,可直接用于性能测试。
注意:导出后需检查编码(如中文乱码),可在Jmeter中设置
HTTP信息头管理器的Content-Type: application/json;charset=utf-8。
四、多维度测试应用
4.1 接口测试
请求构造:通过 Composer 标签手动创建请求,支持GET/POST等方法,可导入会话修改参数后重发;
响应验证:结合 Inspectors 检查响应状态码、JSON结构、字段值是否符合预期;
批量测试:将常用接口保存为SAZ文件,通过 File > Load Archive 快速加载并回放。
4.2 安全测试
1. 参数篡改测试
场景:电商支付接口金额篡改(如将 total=1000 改为 total=1);
操作:设置请求前断点,修改表单或JSON参数,验证后端是否校验数据合法性。
2. 未授权访问测试
场景:删除请求头 Authorization 或 Cookie,模拟未登录用户访问受保护接口;
预期结果:接口应返回 401 Unauthorized 或 403 Forbidden。
3. SQL注入测试
工具联动:Fiddler抓包后,将请求保存为TXT,通过 sqlmap -r request.txt 检测注入漏洞;
手动验证:在URL参数或表单中插入 ' or 1=1--,观察响应是否返回异常数据(如数据库报错)。
4.3 性能测试
1. 弱网模拟
快速配置:Rules > Performance > Simulate Modem Speeds,模拟56Kbps带宽、300ms延迟;
自定义网络:Rules > Customize Rules,修改 m_SimulateModem 代码段:
if (m_SimulateModem) { // 上行延迟300ms,下行延迟500ms oSession["request-trickle-delay"] = "300"; oSession["response-trickle-delay"] = "500"; // 限制带宽为1Mbps(125000字节/秒) oSession["request-trickle-bandwidth"] = "125000"; oSession["response-trickle-bandwidth"] = "125000"; }
2. 性能瓶颈分析
Timeline面板:选中多个请求,查看瀑布图,分析各请求的DNS解析、TCP连接、响应时间占比;
Statistics面板:统计总请求数、总流量、平均响应时间,定位慢请求(如响应时间>1s的接口)。
4.4 自动化测试
1. FiddlerScript脚本扩展
通过 Rules > Customize Rules 编辑JScript.NET脚本,实现自动化逻辑:
修改请求头:所有请求添加 Test-Header: true
static function OnBeforeRequest(oSession: Session) { oSession.oRequest.headers.Add("Test-Header", "true"); }
自动保存响应:将包含 /comment/ 的响应保存到本地
static function OnBeforeResponse(oSession: Session) { if (oSession.uriContains("/comment/")) { var filePath = "D:\comments\" + oSession.id + ".json"; oSession.utilDecodeResponse(); // 解码响应 System.IO.File.WriteAllText(filePath, oSession.GetResponseBodyAsString()); } }
2. Python自动化集成
结合Python脚本解析Fiddler捕获的SAZ文件,实现数据提取与分析:
import json from fiddler.saz import SAZ # 需安装fiddler-saz库 saz = SAZ("capture.saz") for session in saz.sessions: if "/api/comment" in session.url: request_body = session.request.body.decode("utf-8") response_body = session.response.body.decode("utf-8") # 解析JSON并脱敏 data = json.loads(response_body) for comment in data.get("comments", []): comment["user_id"] = "***" # 脱敏用户ID with open("cleaned_comments.json", "w") as f: json.dump(data, f, indent=2)
五、常见问题与解决方案
5.1 HTTPS抓包失败
症状:会话显示为 Tunnel to 且无法解密;
原因:根证书未安装或信任;
解决:
重新安装证书:Tools > Options > HTTPS > Actions > Export Root Certificate to Desktop,双击证书安装至“受信任的根证书颁发机构”;
清除旧证书:certmgr.msc 打开证书管理器,删除所有 DO_NOT_TRUST_FiddlerRoot 证书。
5.2 手机抓包无数据
症状:手机设置代理后,Fiddler未捕获流量;
排查步骤:
确认手机与电脑同局域网,ping [电脑IP] 验证连通性;
检查Fiddler是否勾选 Allow remote computers to connect;
关闭电脑防火墙或添加8888端口入站规则。
5.3 弱网模拟不生效
原因:未启用模拟或规则配置错误;
解决:
确保 Rules > Performance > Simulate Modem Speeds 已勾选;
检查CustomRules.js中 m_SimulateModem 是否设为 true。
六、项目实战经验总结
6.1 短视频APP评论接口测试
场景:采集某平台视频评论数据并脱敏
抓包定位接口:打开APP滑动评论,Fiddler搜索关键词 /comment/list,定位接口 GET https://api.xxx.com/webapi/v2/comment/list?video_id=xxx;
数据解析:通过Inspectors > JSON查看响应结构,提取 comments.text(评论文本)、digg_count(点赞数);
自动化采集:编写Python脚本,循环修改 video_id 参数,批量获取评论并脱敏(过滤 user_id、ip_location 等字段);
反爬应对:设置随机请求间隔(5-10秒/次),使用代理池避免IP封禁。
6.2 电商支付接口安全测试
场景:验证支付金额防篡改机制
正常流程抓包:捕获支付请求 POST https://pay.xxx.com/order,记录参数 total_amount=1000;
断点篡改:设置请求前断点,修改 total_amount=1 后发送;
结果验证:若后端未校验,支付成功且订单金额为1元,说明存在漏洞;若返回金额不匹配错误,则机制有效。
6.3 弱网环境下APP性能测试
场景:模拟2G网络测试APP启动时间
配置弱网:CustomRules.js设置 request-trickle-delay=600(600ms延迟)、response-trickle-bandwidth=62500(500Kbps带宽);
抓包分析:记录APP启动过程中的所有请求,通过Timeline查看总耗时(如首页加载时间从3s增至8s);
优化建议:压缩静态资源(图片、JS)、启用缓存(Cache-Control)、减少非必要请求。
七、总结
Fiddler作为测试工程师的“瑞士军刀”,不仅是抓包工具,更是接口调试、安全验证、性能分析的综合平台。通过本文从原理到实战的系统讲解,新同事可快速掌握其核心功能,并结合项目需求灵活应用。建议在实际测试中多练习断点调试、脚本编写等高级功能,逐步提升问题定位与解决效率。
持续学习资源:
官方文档:Fiddler Classic Docs
社区论坛:Telerik Fiddler Forums
进阶技巧:FiddlerScript脚本开发、与Jenkins/Postman等工具集成。























暂无评论内容