Fiddler 工具手册速览
一、工具基础介绍
1.1 核心功能定位
Fiddler 是业界领先的 Web 调试代理工具,提供以下核心能力:
- 全流量捕获:支持 HTTP/HTTPS/WebSocket 等协议的实时抓包
- 请求篡改:支持修改请求头、请求体、URL 参数等
- 响应模拟:可构造自定义响应或重放历史请求
- 性能分析:内置时间轴、瀑布图、大小统计等可视化工具
- 自动化测试:通过 FiddlerScript 编写自定义规则
- 移动端调试:支持 iOS/Android 设备代理配置
1.2 工作原理架构
二、核心功能详解
2.1 实时捕获配置
代理设置:
- PC 端:
# Chrome 代理配置 chrome://settings/search?q=proxy 设置 -> 高级 -> 系统 -> 打开代理设置
- 移动端:
- iOS:设置 -> WLAN -> 配置代理 -> 手动
- Android:设置 -> WLAN -> 修改网络 -> 高级选项
捕获过滤器:
# 语法:Protocol!Host!URL!StatusCode
HTTPS!example.com!/api/!404
# 高级示例
(HTTP | HTTPS) && (Host: api.example.com || Host: admin.example.com)
2.2 请求篡改技术
手动修改:
- 在会话列表选择请求
- 点击 Inspectors 标签页
- 修改 Request Headers/Body
- 点击 Run to Completion 发送
自动修改规则:
// FiddlerScript 示例:自动添加认证头
if (oSession.HostnameIs("api.example.com")) {
oSession.oRequest["Authorization"] = "Bearer xxx";
}
批量修改:
// 批量修改 User-Agent
oSession.oRequest["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...";
2.3 响应模拟功能
AutoResponder:
- 启用规则:
Enable rules
- 匹配条件:
EXACT:https://api.example.com/data
REGEX:(?insx).*\.png
- 响应类型:
200 OK
:返回预设响应404 Not Found
:模拟错误*redirect:https://new-url.com
:重定向
响应构造:
{
"status": "mock",
"data": {
"id": 123,
"value": "fiddler_mock"
}
}
2.4 性能分析工具
时间轴分析:
- 关键指标:
DNS Lookup
TCP Connect
SSL Handshake
Send/Receive
- 优化建议:
- 并行请求数 > 6:需优化资源加载
- 首次字节时间 > 800ms:检查服务器响应
瀑布图优化:
gantt
title 页面加载时序
section 请求1
DNS :a1, 20ms
TCP :a2, after a1, 40ms
SSL :a3, after a2, 60ms
Send :a4, after a3, 20ms
Receive :a5, after a4, 100ms
section 请求2
DNS :b1, 30ms
TCP :b2, after b1, 50ms
...
2.5 弱网模拟配置
自定义规则:
// 模拟 3G 网络(500ms 延迟,1.5Mbps 下行)
if (oSession.host.toLowerCase() == "api.example.com") {
oSession["x-overrideDelay"] = "500";
oSession["x-overrideRate"] = "1500000";
}
预设场景:
- 3G 慢速:延迟 300ms,带宽 768Kbps
- LTE 良好:延迟 100ms,带宽 15Mbps
- 卫星连接:延迟 600ms,带宽 256Kbps
三、典型应用场景
3.1 API 调试实战
请求验证:
- 捕获
/api/login
请求 - 修改
password
参数为错误值 - 观察返回的
401 Unauthorized
Token 续期:
// 自动刷新过期 Token
if (oSession.url.includes("/api/refresh")) {
let oldToken = oSession.oRequest["Authorization"];
oSession.oRequest["Authorization"] = "Bearer " + refreshToken(oldToken);
}
3.2 性能优化案例
资源合并:
- 原始请求:12 个 JS 文件,总大小 1.2MB
- 优化后:合并为 3 个文件,总大小 800KB
- 效果:请求数减少 75%,加载时间缩短 40%
缓存策略:
# 优化前
Cache-Control: no-cache
# 优化后
Cache-Control: max-age=31536000, immutable
3.3 安全测试应用
SQL 注入检测:
' OR '1'='1' --
- 特征:参数包含特殊字符
- 防御建议:参数化查询 + WAF 规则
敏感信息泄露:
// 检测密码明文传输
if (oSession.url.includes("/login") && oSession.GetResponseBodyAsString().includes("password")) {
FiddlerObject.alert("检测到密码明文传输!");
}
3.4 移动端调试
iOS 配置:
- 设置 -> WLAN -> 配置代理 -> 手动
- 服务器:PC 的 IP 地址
- 端口:8866
- 安装 Fiddler 根证书:
http://ipv4.fiddler:8866
Android 配置:
# 终端命令(需 ADB)
adb shell settings put global http_proxy 192.168.1.100:8866
四、高级功能集成
4.1 扩展插件生态
常用插件:
插件名称 | 功能描述 | 安装方式 |
---|---|---|
FiddlerScript | 自定义规则编写 | 内置功能,无需安装 |
Composer | 手动构造请求 | 右键会话 -> Replay -> Reissue … |
Session Rules | 自动化规则管理 | Rules -> Customize Rules |
JSON Inspector | JSON 格式化显示 | 右键会话 -> JSON -> Format |
4.2 自动化测试框架
FiddlerScript 示例:
// 自动化测试用例
class Handlers {
static function OnBeforeResponse(oSession: Session) {
if (oSession.url.includes("/api/data")) {
let body = oSession.GetResponseBodyAsString();
if (body.indexOf("error") != -1) {
FiddlerObject.alert("检测到错误响应!");
}
}
}
}
持续集成:
# 命令行调用
Fiddler.exe /a /c:"C:\scripts\test.js" /r:"C:\capture.saz"
4.3 性能调优工具链
与 Chrome DevTools 集成:
- 启动 Fiddler 代理
- Chrome 访问
chrome://net-internals/#events
- 对比两者捕获的请求时序
与 JMeter 协同:
- Fiddler 捕获请求
- 导出为 JMeter 脚本(.jmx)
- 执行压力测试
五、实战案例分析
5.1 HTTPS 解密
配置步骤:
- 工具 -> 选项 -> HTTPS
- 勾选
Decrypt HTTPS traffic
- 导出根证书:
Actions -> Export Root Certificate to Desktop
- 安装证书到受信任的根证书颁发机构
验证:
# 解密后的请求头应包含
Connection: keep-alive
Upgrade-Insecure-Requests: 1
5.2 自动化测试脚本
场景:自动重试失败请求
// 规则配置
if (oSession.responseCode >= 400 && oSession.responseCode < 500) {
let retryCount = parseInt(oSession["x-retry-count"] || "0");
if (retryCount < 3) {
oSession["x-retry-count"] = (retryCount + 1).toString();
oSession.oFlags["x-AutoRetry"] = "true";
oSession.utilDecodeRequest();
oSession.RequestBody = oSession.GetRequestBodyAsString();
FiddlerApplication.oProxy.SendRequest(oSession.oRequest.headers, oSession.requestBodyBytes, oSession);
}
}
5.3 移动端性能调优
步骤:
- 捕获移动端请求
- 分析首次渲染时间(FMP)
- 优化关键资源:
- 延迟加载非关键 JS
- 压缩图片资源(WebP 格式)
- 启用 HTTP/2 协议
六、常见问题解决
6.1 捕获不到流量
排查步骤:
- 检查代理设置:
工具 -> 选项 -> 连接
- 确认证书安装:
工具 -> 选项 -> HTTPS
- 防火墙放行:允许 Fiddler 通过 Windows Defender 防火墙
6.2 解密 HTTPS 失败
解决方案:
- 重新安装根证书:
工具 -> 选项 -> HTTPS -> Actions -> Reset Certificate
- 清除浏览器缓存
- 重启 Fiddler 和浏览器
6.3 性能分析不准确
优化建议:
- 禁用无关扩展:
工具 -> 选项 -> 扩展
- 调整采样率:
工具 -> 选项 -> 性能 -> 采样率
- 使用独立实例:
Fiddler.exe -noext
七、最佳实践指南
7.1 捕获策略
- 使用
Ctrl+F
快速过滤 - 对敏感请求标记颜色:
右键会话 -> 标签 -> Set Color
- 定期清理会话:
文件 -> 清除会话
7.2 分析流程
- 全局概览:统计面板查看总请求数/大小
- 协议分析:查看 HTTPS/WebSocket 占比
- 细节审查:Inspectors 标签页检查 Cookie/Token
- 性能瓶颈:时间轴定位慢请求
7.3 性能调优
- 启用压缩:
工具 -> 选项 -> 压缩
- 配置自动保存:
文件 -> 自动保存 -> 每 5 分钟
- 使用 SAZ 格式:
文件 -> 另存为 -> Session Archive ZIP