三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

别只用来抓包了!Fiddler这些隐藏玩法,让调试效率翻倍

别只用来抓包了!Fiddler这些隐藏玩法,让调试效率翻倍

别只用来抓包了!Fiddler这些隐藏玩法,让调试效率翻倍

如果你已经熟悉Fiddler的基础抓包功能,那么是时候解锁它的进阶玩法了。这款工具远不止于简单的请求拦截,它更像是一把瑞士军刀,能帮你解决开发调试中的各种棘手问题。本文将带你探索Fiddler那些鲜为人知的高级功能,从API性能分析到数据模拟,从批量修改到自动化测试,让你的调试效率提升一个量级。

1. 断点调试:精准拦截与修改请求

调试中最头疼的莫过于无法复现的偶发问题。Fiddler的断点功能(Breakpoints)让你能在请求发出前或响应返回前暂停流程,实时修改数据。

1.1 设置条件断点

全局断点虽然简单,但会影响所有请求。更聪明的做法是设置条件断点:

// 在FiddlerScript中添加条件断点规则 if (oSession.uriContains("api/v1/payment")) { oSession["x-breakrequest"] = "payment"; // 在请求发出前中断 oSession["x-breakresponse"] = "payment"; // 在响应返回前中断 }

提示uriContains可以替换为hostContainsurlMatches等条件,实现精准拦截。

1.2 实时修改请求/响应

中断请求后,你可以:

  • 修改请求头(如添加Authorization
  • 篡改POST数据(测试异常输入)
  • 修改响应状态码(模拟服务器错误)
  • 延迟响应(测试超时处理)

实际案例:某电商APP在支付成功后偶发崩溃。通过设置/payment/callback的条件断点,发现当响应延迟超过5秒时客户端处理异常。最终定位到是超时处理逻辑缺陷。

2. AutoResponder:打造你的虚拟后端

前后端分离开发中,后端接口经常成为瓶颈。AutoResponder让你能完全脱离真实后端进行开发测试。

2.1 创建智能Mock规则

匹配规则响应文件延迟适用场景
regex:.*/user/profileprofile.json0ms用户资料页开发
exact:https://api.com/login401.json200ms登录失败测试
*delay:500(无)500ms全局延迟测试

关键技巧

  1. 使用*delay模拟网络延迟
  2. regex:实现通配匹配
  3. 结合FiddlerScript动态生成响应

2.2 动态响应生成

对于需要动态数据的场景,可以创建规则指向本地脚本:

// 在AutoResponder规则中选择"Find a file..."并指向此脚本 static function OnBeforeResponse(oSession: Session) { if (oSession.uriContains("/api/random")) { oSession.utilCreateResponseAndBypassServer(); oSession.responseCode = 200; oSession.oResponse.headers.HTTPResponseCode = 200; oSession.oResponse["Content-Type"] = "application/json"; oSession.utilSetResponseBody('{"value":'+Math.random()+'}'); } }

3. Customize Rules:定制你的流量处理流水线

FiddlerScript是Fiddler最强大的功能之一,通过编写JScript.NET脚本,你可以实现:

3.1 自动化流量处理

// 示例:自动修改所有API请求添加追踪ID if (oSession.uriContains("/api/")) { oSession.oRequest["X-Trace-Id"] = Guid.NewGuid().ToString(); } // 示例:屏蔽特定广告请求 if (oSession.HostnameIs("ad.doubleclick.net")) { oSession["ui-color"] = "red"; oSession.oRequest.FailSession(404, "Blocked", "Ad blocked"); }

3.2 性能监控与分析

// 记录慢请求到日志 if (oSession.Timers.ServerDoneResponse - oSession.Timers.ClientBeginRequest > 3000) { var log = "Slow API: " + oSession.url + " took " + (oSession.Timers.ServerDoneResponse - oSession.Timers.ClientBeginRequest) + "ms"; FiddlerApplication.Log.LogString(log); }

实际应用:某团队通过此脚本发现了第三方地图API在特定区域响应缓慢的问题,最终推动供应商优化了CDN节点分布。

4. Composer:打造超级API测试客户端

比起Postman等工具,Fiddler的Composer与抓包环境无缝集成,特别适合复杂场景测试。

4.1 请求历史重用技巧

  1. 在会话列表右键请求 → "Compose New"
  2. 修改参数后多次发送(Shift+Enter)
  3. 使用@符号引用文件内容作为请求体

4.2 自动化测试套件

将常用请求保存为.saz文件,配合脚本实现自动化测试:

# 使用Fiddler命令行工具执行测试套件 & "C:\Program Files\Fiddler\ExecAction.exe" test.saz

典型测试流程

  1. 录制正常流程请求
  2. 修改关键参数生成异常用例
  3. 批量执行并检查响应
  4. 使用FiddlerScript自动验证结果

5. 时间线分析:定位性能瓶颈

Fiddler的时间线视图能直观展示请求的瀑布流,但多数开发者只看了表面数据。

5.1 关键性能指标解读

  • DNS时间:超过100ms可能需优化DNS解析
  • TCP连接:频繁新建连接表明缺少keep-alive
  • SSL协商:首次HTTPS连接额外开销
  • TTFB:服务器处理时间
  • 下载时间:与内容大小和带宽相关

5.2 优化实战案例

某应用首页加载缓慢,通过时间线分析发现:

  1. 6个静态资源来自不同CDN域名
  2. 每个域名都需要新建TCP连接
  3. 多个小文件下载效率低

优化方案

  • 合并静态资源
  • 使用HTTP/2
  • 调整CDN域名策略

优化后加载时间从4.2s降至1.8s。

6. 扩展Fiddler:打造专属调试利器

Fiddler的扩展API让它几乎无所不能。

6.1 实用扩展推荐

  1. Fiddler Extension Kit:快速开发自定义扩展
  2. Watcher:监控特定请求并提醒
  3. SaveAll:一键保存所有会话

6.2 开发自己的扩展

// 示例:简单请求计数器扩展 [ProfferFormat("RequestCounter", "Count requests by type")] public class RequestCounter : IFiddlerExtension { private Dictionary<string, int> _counts = new Dictionary<string, int>(); public void OnLoad() { FiddlerApplication.AfterSessionComplete += session => { var method = session.RequestMethod; _counts[method] = _counts.ContainsKey(method) ? _counts[method] + 1 : 1; }; } public void OnBeforeUnload() { } }

将这些高级功能融入你的日常工作流,Fiddler将从简单的抓包工具蜕变为全能的开发调试平台。记住,工具的强大程度取决于你对其潜力的挖掘——下次遇到调试难题时,不妨先想想:"Fiddler能怎么帮我解决这个问题?"

← 返回列表