一、简介及原理
1.1 Fiddler简介
Fiddler 是一个 HTTP 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯。Fiddler 提供了电脑端、移动端的抓包、包括 http 协议和 https 协议都可以捕获到报文并进行分析;可以设置断点调试、截取报文进行请求替换和数据篡改,也可以进行请求构造,还可以设置网络丢包和延迟进行 APP 弱网测试等。
1.2 抓包原理
如上图,Fiddler 作为一个代理,先是捕捉到客户端的 request 请求,然后再自己转发到服务器端,服务器接收到请求时,会返回一个响应 response ,Fiddler 还是会继续捕捉到服务器的响应请求,再来转发给客户端,简单来说, Fiddler 就是作为一个中间人。
1.3 和charles的区别
-
charles可以实时过滤请求,fiddler添加过滤器后再发送请求才能起作用
-
charles可以树状或者列表查看各个请求,更加直观,fiddler只能列表查看
-
charles可以对某个请求进行断点操作,而fiddler是对所有的请求进行断点
-
charles模拟弱网是限制带宽,并且可选择只对某个主机路径进行限速;而fiddler是延长时间,并且是对所有接口
Fiddler主要运行在Windows上,而Charles一般在Mac上使用的比较多。
二、安装及配置
2.1 安装
官网:https://www.telerik.com/fiddler
下载网址:Download Fiddler Web Debugging Tool for Free by Telerik
2.2 Fiddler配置
Fiddler 能直接抓取 HTTP 协议请求,要想抓取 HTTPS 请求就需要安装 Fiddler 证书。
具体步骤:
-
点击工具栏中 Tools——>Options...
-
切换到 HTTPS 选项卡,勾选 Capture HTTPS CONNECTs,勾选 Decrypt HTTPS traffic
-
重启 Fiddler
选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求,第一次会弹出证书安装提示,若没有弹出提示,勾选Actions-> Trust Root Certificate,安装证书
2.3 手机抓包配置
-
启动Fiddler, 打开菜单栏中的 Tools > Options, 打开“Options” 对话框,切换到“Connections” 选项卡, 然后勾选“Allowromote computers to connect” 后面的复选框, 然后点击“OK” 按钮
-
在本机命令行输入: ipconfig, 找到本机的ip地址。
-
手机打开浏览器,在地址栏中输入代理服务器的 IP 和端口(即电脑的IP加fiddler的端口),会看到一个Fiddler 提供的页面,安装证书
-
打开手机的“设置” ->“WLAN”,找到你要连接的网络,在上面长按,然后选择“修改网络”,弹出网络设置对话框,然后勾选“显示高级选项”(不同的手机,设置方法有所不同)
-
在“代理” 后面的输入框选择“手动”,在“代理服务器主机名”后面的输入框输入电脑的ip地址,在“代理服务器端口”后面的输入框输入fiddler端口号, 然后点击“保存” 按钮
-
然后启动android设备中的浏览器,访问百度的首页,在fiddler中可以看到完成的请求和响应数据
-
三、面板介绍
左侧面板就是捕捉的请求和响应的会话列表,右边面板就是对应请求的详细信息,比如请求头,表单信息等。顶部是Toolbar工具栏,左侧底部是命令行工具。
3.1 Toolbar工具栏
3.2 左侧面板
Fiddler抓取到的http请求(每一条称为一个session)
-
列表介绍
列名 | 含义 |
# | 抓取顺序 |
result | HTTP状态码 |
Protocol | 请求使用的协议,HTTP/HTTPS等 |
Host | 请求地址的主机名 |
URL | 请求资源的位置 |
Body | 该请求的大小 |
Caching | 请求的缓存过期时间或者缓存控制值 |
Conten-Type | 请求响应的类型 |
Process | 发送此请求的过程:进程ID |
Comments | 允许用户为此回话添加备注 |
Custom | 允许用户设置自定义值 |
-
session不同颜色的含义
-
session不同图标的含义
3.3 右侧面板
页签 | 含义 |
Statistics统计 | 通过该页签, 用户可以通过选择多个会话来得来这几个会话的总的信息统计,比如多个请求和传输的字节数。选择第一个请求和最后一个请求, 可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多, 从而对页面的访问进行访问速度优化 |
inspectors检查 | 它提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息,它分为上下两部分:上部分为HTTP Request(请求)展示,下部分为HTTPResponse(响应)展示 |
AutoResponse自动响应 | Fiddler最实用的功能, 它可以抓取在线页面保存到本地进行调试, 大大减少了在线调试的困难, 可以让我们修改服务器端返回的数据, 例如让返回都是HTTP404或者读取本地文件作为返回内容。 |
composer构建 | 支持手动构建和发送HTTP, HTTPS和FTP请求, 我们还可以从web session列表中拖曳session, 把它放到composer选项卡中, 当我们点击Execute按钮, 把请求发送到服务器端 |
log日志 | 打印日志 |
Filters过滤 | 过滤器可以对左侧的数据流列表进行过滤, 我们可以标记、 修改或隐藏某些特征的数据流 |
Timeline时间轴 | 时间轴,也称为Fiddler的瀑布图,展示网络请求时间的功能。 每个网络请求都会经历域名解析、建立连接、发送请求、接受数据等阶段。把多个请求以时间作为 X 轴, 用图表的形式展现出来, 就形成了瀑布图。 在左侧会话窗口点击一个或多个(同时按下 Ctrl 键), Timeline 便会显示指定内容从服务端传输到客户端的时间 |
3.4 命令行工具
Fiddler的左下角有一个命令行工具叫做QuickExec,允许你直接输入命令。
常见得命令有:
-
help : 打开官方的使用页面介绍, 所有的命令都会列出来
-
cls : 清屏 (Ctrl+x 也可以清屏)
-
select : 选择会话的命令, 选择所有相应类型select image、select css、select html
-
?sometext : 查找字符串并高亮显示查找到的会话列表的条目,?qq.com
-
>size : 选择请求响应大小小于size字节的会话
-
=status/=method/@host:查找状态、方法、主机相对应的session会话,=504,=get,@www.qq.com
-
quit:退出fiddler
四、主要功能
4.1 过滤域名
Fiddler抓包可以完成调试,但是多余的网页请求和手机的其他链接影响效率。所以需要排除其他无用的包,只关注指定的域名的请求包。
-
实现了对所有的 www.baidu.com 和 https://www.baidu.com 的包的过滤。
-
进程过滤
-
Request Headers过滤
4.2 修改接口数据
-
抓包,找到要拦截的请求,然后拖到AutoResponder中进行编辑,Add Rule
-
在Rule Editor中的第二栏点击下拉列表,选择“Create New Response...”
-
点击Save,会弹出一个窗口,在弹窗中选择Raw栏,将抓包抓到的请求对应的Raw栏内容复制粘贴进去,然后将其中想要修改的部分进行修改,然后点击“Save”进行保存
-
如果想要频繁修改替换返回体中某些内容,可以在AutoResponder里相应待拦截请求上点击右键,“Edit Response”编辑返回体
-
如果还想再方便一点,可以在AutoResponder里相应待拦截请求上点击右键,“Generate File”将response body保存到本地txt文件,然后打开txt文件修改保存即可生效。
但是注意,如果通过文件的方式保存response内容,可能会出现编码问题导致的客户端处理出错。最建议的方式,不会出错的方式,还是通过“Create New Response...”的方法。
4.3 构造请求
Composer允许自定义请求发送到服务器,可以手动创建一个新的请求,也可以在会话表中,拖拽一个现有的请求
Parsed模式下你只需要提供简单的URLS地址即可(如下图,也可以在RequestBody定制一些属性,如模拟浏览器User-Agent)
4.4 模拟弱网
打开fiddler,默认情况下Rules->Performance->Simulate Modem Speeds是未勾选状态,此时网络正常。当选中此选项后,就实现了模拟弱网效果。
自定义Modem Speeds ,需点开Rules → Customize Rules,找m_SimulateModem这个字,会找到下面这段:这就是他模拟网路速度的原理,每上传/下载1KB 要delay多久
五、常见问题
5.1 Response乱码
问题:有时候我们看到Response中的HTML是乱码的, 这是因为HTML被压缩了, 我们可以通过两种方法去解压缩。
步骤:
方法一:点击红框内容“Response body is encouded.Click to decode.”
方法二:选中工具栏中的"Decode"。 这样会自动解压缩。
5.2 浏览器无法上网
当启动fiddler后,会发现无论是chorme、firefox都无法访问https的网站,http还是可以访问的。这是因为fiddler默认只支持http不支持https的,需要给浏览器安装证书才可以支持。
-
打开Tools-Options-HTTPS选项卡;
-
点击"Actions"下拉选择“Trust Root Certificate”-弹框选择“yes”-弹框选择“yes”;
-
点击"Actions"下拉选择“Export Root Certificate to Desktop”,将fiddler证书导出到桌面;
-
打开谷歌浏览器,设置-高级-管理证书;
-
导入-下一步-浏览证书路径-下一步-下一步;
-
重启浏览与fiddler后查看在启动fiddler的情况下Chrome浏览器浏览网页。