一、是什么?
Fiddler 相当于一个 “代理”,浏览器访问浏览器页面时,就会把HTTP请求先发给Fiddler,Fiddler 再把请求转发给浏览器的服务器,当浏览器服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器。
二、为什么用
线上接口请求转发到本地Debug调试
三、一些配置
HTTPS
刚下载安装好后,是默认不支持抓取HTTPS协议的,要想抓取HTTPS要添加以下配置。(仅使用HTTP则无需配置)
先点击左上角的Tools-Options-HTTPS
然后再选中这三个选项,
接着点击Actions-Export Root Certificate to Desktop,此时桌面上会出现这个文件:
我们关闭Fiddler,接着我们需要在浏览器上导入证书(上面这个文件),以谷歌浏览器为例:点击设置-安全和隐私设置-安全-管理证书:
在受信任的根证书颁发机构里导入桌面上生成的证书即可,最后我们重新打开Fiddler,就可以抓取HTTPS协议了
HTTP:
依次打开Tools>Options>Connections,勾选Allow remote computers to connect,同时记住fiddler listen on port的端口号,默认8888,如下图
四、如何用?
以Debug 一个线上系统为例子,我想知道用户登陆时的流程:
1.确定源地址和端口号
首先,已知线上运行的前端项目请求的不是本地服务,代理的作用就是把请求拦截了,将地址和端口号改为本地运行的服务,线上的前端项目: http://172.16.2.245:18080/ ,系统向后端服务的请求地址是/sys/api/v1.0开头
2.确定后端地址和端口号、编写脚本
我的本地服务是 localhost:18181
那么在fiddler classic中,找到脚本FiddlerScript—OnBeforeRequest,在向后端发送请求前,将ip和端口号改为我们的本地地址和本地端口:
脚本内容就在static function OnBeforeRequest(oSession: Session)最下面再添加一个if条件:
if (oSession.fullUrl.ToLower().Contains(“/sys/api/v1.0”)) {
oSession.host = “localhost”;
oSession.port = 18181;
}
3.最后保存脚本
4.开启代理和关闭代理
左下角的capturing为开启状态,开启或关闭点击此处即可。
5,实际效果
这样就把线上的请求,拦截到本地运行的服务,进行debug。
五、其他功能
fiddler过滤功能
fiddler抓包时会把所有的请求都抓取,这时就需要进行过滤。fiddler右边有个Filters,打开该页面后,勾选use Filters,然后根据需要设置过滤规则,例如我选中show only Internet host ,然后在输入框中输入需要显示的网址,再点击actions>run filterset now即可实现过滤,如图所示
fiddler设置断点方法
第一种:打开Fiddler 点击Rules-> Automatic Breakpoints ->Before Requests(这种方法会中断所有的会话)消除命令 点击Rules-> Automatic Breakpoints ->Disabled
第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)
FAQ
Q1 为什么有的浏览器可以直接使用Fidder抓取请求?
Fiddler打开之后默认是可以抓取到Chrome/IE浏览器的请求的,这是因为Fiddler默认会勾选“Act as system proxy on startup”,此选项会在Fiddler启动的时候作为系统代理:
我们会发现系统代理设置已经被Fiddler篡改,端口和Fiddler中保持一致:
这也就是为什么Fiddler启动之后默认可以抓取到Chrome/IE的请求,而Firefox浏览器使用的是单独的一套代理系统,如果Firefox也想默认抓取到,打开火狐浏览器的连接设置,选择使用系统代理即可。
Q2 为什么代理会自动掉线?报错:
原因:有其他软件抢占、修改了系统的默认代理
如安装了深信服VPN等软件,后台程序会定时的尝试抢占系统的默认代理,所有FidderClassic会在使用中不时掉线。
解决方案:
通过安全工具-高级工具的火绒剑监控代理变化,点击:系统-过滤-路径,添加包含关键词:ProxyOverride
当Fiddler代理再次被改动时,查看记录的进程信息:
找到该进程并关闭