Fidder是一个稳定免费的抓包工具,提供了非常多的实用功能。
界面介绍
工具栏依次为
- windows有些应用可能无法捕获,可以尝试修改这个配置;
- 给请求添加备注
- 回放,重新请求,快捷键R
- 清空面板,可以分类型清空
- GO,请求断点继续(请求断点:状态栏第三列点击,切换断点模式,上箭头:发送时,下箭头:响应时)
- Stream,代理模式,是否开启流模式,不开启是缓冲模式(全部响应时才显示出来)
- Decode,解压http请求
- Keep session,保存会话数量,越多占用内存越多
- Any process,只看哪个进程的请求,拖动到对应进程的窗口上,松开
- Save,保存会话,下次可以通过file-load archive加载查看
- 截图
- 计时
- 将当前请求在浏览器中打开
- clear cache,清除ie浏览器缓存
- TextWizard,解码编码工具,base64、sha256等等
- Tearoff,分离右侧面板
- MSDN搜索,没啥用
监控面板
监控面板可以看到请求记录,包含请求状态码、协议、链接、类型、缓存等;
命令行
fidder提供了一些命令,按alt+q
可以快速聚焦命令行;
在命令行中输入:help
即可打开文档;
常用的命令行
- ?搜索内容
- =状态码(200\302\404...)
- =请求方法(get\post...)
- select 响应类型(image\css\html)
状态栏
- capturing是否捕获中
- all process,捕获对象(所有、浏览器、非浏览器)
- 断点开关
- 请求序号
- 请求的完整链接
请求详情
请求头、文本视图、form表单参数、Cookies、原始Http请求头、Json视图等
响应详情
响应头、文本视图、图片视图、Web视图、Cookies、原始Http响应头、Json视图等
如何抓包?
为什么抓不到?
正常情况下,启动了fiddler就可以抓包,但有时候怎么也抓不到,我将几种可能的情况列举如下。
- 左下角没有显示Capturing,这个时候可能是不小心关掉了,也可能是被其他软件抢占了代理导致,点击重新打开即可;
- 没有配置捕获https,请到fidder最上方的菜单栏:Tools - HTTPS - 勾选Capture HTTPS CONNECTs、勾选Decrypt HTTPs traffic,勾选之后会弹出提示让你安装一下证书,点确认就好;
-
请求被缓存了,比如一些js文件通常情况下都会被浏览器缓存,这个时候不会被fiddler抓到请求,这个时候可以勾选一下Disable Cache,然后就可以抓到了。
-
勾选了Filters,如果是不小心的,取消勾选
Use Filters
即可
显示IP、时间、耗时、请求方法列
- 菜单栏 - Rules - Customize Rules,或者在右侧功能区,找到FiddlerScript
- 要显示IP列,先找到
Main
函数,添加如下代码
static function Main() {
FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP",120,"X-HostIP");
}
- 显示发起时间、请求耗时、请求方法列,直接在
Handlers
类中添加如下代码
// 请求的发起时间
public static BindUIColumn("Send Time", 80)
function SendTimeToString(oS: Session){
return oS.Timers.ClientBeginRequest.ToString("HH:mm:ss.fff");
}
// 请求耗时
public static BindUIColumn("Take Time", 80)
function CalcTakeTime(oS: Session){
if ((oS.Timers.ClientDoneResponse > oS.Timers.ClientBeginRequest)) {
var DiffVal = (oS.Timers.ClientDoneResponse - oS.Timers.ClientBeginRequest).TotalMilliseconds;
if (DiffVal >= 1000) {
// 大于1000毫秒的,单位设置为s
return (DiffVal / 1000).ToString('f2') + 's';
} else {
return DiffVal.ToString('N0') + 'ms';
}
}
return "0ms";
}
// 显示请求的METHOD
public static BindUIColumn("Method", 40)
function RequestMethod(oS: Session): String {
return oS.RequestMethod;
}
- 重启Fiddler即可看到补充的这些列
FiddlerScript使用的是C#语法
请求断点,修改请求参数和响应结果
点击如下位置即可切换断点开关:
断点类型:
-
请求断点(在发送请求之前断点,可修改请求参数等)
-
响应断点(在响应之后断点,可修改响应结果等)
请求断点,修改请求参数:
我们以百度搜索掘金关键词为例,通过请求断点将关键词改为稀土掘金
-
打开请求断点,找到对应请求及对应的关键词参数
-
修改关键词参数,点击
Run to Completion
,则修改完成即可看到修改请求参数后的响应结果 -
修改完成之后,关闭断点,点击
Go
放开剩余被断点请求
响应断点,修改响应结果:
我们以修改掘金创作者等级为例
-
首先我们找到用户等级的请求:api.juejin.cn/user_api/v1…
-
设置响应断点,刷新掘金页面,重新请求,然后并没有发现对应的请求,这个时候可以点击
Go
往下走,即可看到请求 -
点击
Text View
(JSON视图无法修改内容),可以看到响应内容是乱码,我们点击上面的黄色区域Response body is encoded. Click to decode
即可看到正常的响应内容 -
修改等级数据,然后点击
Run to Completion
即修改完成,然后同上放开所有断点 -
切换到掘金个人中心页面,即可看到修改后的等级,瞬间成为8级大佬可还行🤣
响应内容替换为本地文件,实现线上代码调试
这里我们启动一个本地服务做测试
-
本地服务源码
-
打开Fiddler,选中对应的请求,切换到
AutoResponser
选项卡,勾选enable rules
,勾选unmatched requests passthrough
(允许未匹配到的请求正常响应), 点击Add Rule
,在Rule Editor
下方第二个下拉框,选择Find a file...
,选择要替换的文件,设置完成后,点击Save
-
查看响应结果,被替换成功,这个时候随便修改这个js文件,刷新页面即可看到实时修改的内容,对于调试线上代码非常方便
以上修改不止于替换js文件,还有图片、html等,还可以修改响应状态码...
请求重试,修改请求参数,调试接口
重新请求可以先选中请求,然后点击工具栏的Replay
,或者使用快捷键R
对于需要修改参数重新请求,我们可以使用Fiddler的Composer
模块,相较于postman会更方便一些,比如一些需要鉴权的接口,用postman还需要手动设置一下鉴权,比如cookie啥的,而Fiddler可以直接在原有请求上修改,这对于调试接口很有用。
以掘金搜索Fiddler为例,我们通过
Composer
将搜索参数修改为Filder入门,然后重新请求。
-
首先找到对应的请求,然后拖动到
Composer
面板中 -
修改请求参数,然后点击
Execute
即可以修改后的参数重新发起一次请求,然后就可以在监控面板中看到重新发起的请求
查找请求
有时候请求太多,如何找到我想看的那个请求呢?
-
ctrl+f,搜索并高亮请求,可设置搜索请求、响应、链接、正则匹配、高亮颜色等;
-
命令行,通过
?要搜索的内容
,比如?/list
即可匹配出带有/list的url,命令行还有很多功能,比如=200
:查找响应码为200的请求,=post
:查找post请求,select image
:查找图片类型
仅捕获某个进程
- 仅捕获某个进程,工具栏第9个选项:
Any Process
,按住拖动指向应用窗口即可;
仅捕获某个域名
Filters - 勾选Use Filters - Host第二个下拉选项,设置为Show only the following Hosts
- 输入想要捕获的域名,然后点击Actions
- Run FilterSet now
,应用filter设置.
弱网测试
FiddlerScript - 找到OnBeforeRequest
钩子函数,添加如下代码:
static function OnBeforeRequest(oSession: Session) {
// 设置请求每kb延时3秒
oSession["request-trickle-delay"] = "3000";
// 设置响应每kb延时3秒
oSession["response-trickle-delay"] = "3000";
}
移动端设备抓包
- 确保当前设备和移动端设备连接的是同一个网络
- 设置Fidder,菜单栏 - Tools - Options - Connections - 勾选
Allow Remote computers to connect
(允许远程计算机连接),端口默认是8888,可以修改为别的
-
将移动端设备的代理设置为PC的Fiddler的代理,ip+端口(默认8888)
-
然后可能还需要安装Fiddler的证书,移动端设备浏览器访问Fiddler的代理端口,点击
FiddlerRoot certificate
下载证书,然后安装(各品牌设备安装操作不一致,请自行摸索) -
然后移动端设备发起请求时,即可在Fidder上查看到请求记录