Fiddler简介
- Fiddler是位于客户端和服务器端的HTTP代理
- 目前最常用的http抓包工具之一
- 功能非常强大, 是web调试利器
- 监控浏览器所有的HTTP/HTTPS流量
- 查看,分析请求内容细节
- 伪造客户端请求和服务器响应
- 测试网站的性能
- 解密HTTPS的web会话
- 全局,局部断点功能
- 第三方插件
- 使用场景
- 接口调试
- 接口测试
- 线上环境调试
- web性能分析
- 判断前后端bug
- 开发环境hosts配置
- mock
- 弱网断网测试
B/S架构
- 编写程序部署到web服务器
- web服务器运行在服务器上,绑定ip地址并监听某端口,接收和处理http请求
- 客户端通过http协议获取服务器上的网页,文档等资源
工作原理
HTTP协议
HTTP
- Hyper Text Transfer Protocol(超文本传输协议)
- 用于从万维网服务器传输超文本到本地浏览器的传送协议
- HTTP协议是基于TCP的应用层协议,它不关心数据传输的细节,主要用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。
- http是基于请求和响应模式的,无状态的,应用层协议
请求方法 (Request Method)
请求方法 | 备注 |
---|---|
GET | 请求资源 |
POST | 提交资源 |
Head | 获取响应头 |
PUT | 替换资源 |
DELETE | 删除资源 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
URL
- Uniform Resource Locator 统一资源定位符
- 用于描述网上的资源
- 格式:schema://host[:port#]/path/…/[?query-string]
- scheme: 协议,如http, https, ftp等
- host: 域名或者IP地址
- port: 端口
- path: 资源路径
- query-string:发送的参数
请求头 (Request Header)
常见的请求头,开发还可以自定义其他请求头。
请求头 | 描述 |
---|---|
Host | 主机ip地址或域名 |
User-Agent | 客户端相关信息,如操作系统,浏览器等信息 |
Accept | 指定客户端接收信息类型,如image/jpg, text/html, application/json |
Accept-Charset | 客户端接受的字符集,如gb2312, iso-8859-1 |
Accept-Encoding | 可接受的内容编码,如gzip |
Accept-Language | 接受的语言,如zh-cn |
Authorization | 客户端提供给服务端,进行权限认证的信息 |
Cookie | 携带的cookie信息 |
Referer | 当前文档的URL,即从哪个链接过来的 |
Content-Type | 请求体内容类型,如application/x-www-form-urlencoded |
Content-Length | 数据长度 |
Cache-Control | 缓存机制,如no-cache |
Pragma | 放置页面被缓存,相等于Cache-Control: no-cache |
状态码 (Status Code)
- 用于表示网页服务器HTTP响应状态的3位数字代码
|状态码| 描述 |
|–|--|
| 1XX | 提示信息,请求被成功接收 |
| 2XX | 成功,请求被成功处理 200 |
| 3XX | 重定向相关 304 |
| 4XX | 客户端错误 404 |
| 5XX | 服务器端错误 500 |
响应头 (Response Header)
常见的响应头信息,也可以自定义。
响应头 | 描述 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-Cookie | 设置cookie |
Last-Modified | 资源最后修改时间 |
Content-Type | 响应的类型和字符集, 如content-type: text/html;charset=utf-8 |
Content-Length | 内容长度 |
Connection | 如Keep-Alive, 表示保持tcp连接不关闭,不会永久保持连接,服务器可设置 |
Location | 指明重定向的位置,新的URL地址,如304的情况 |
Fiddler下载安装
下载地址: https://www.telerik.com/download/fiddler
记住:是下载Fiddler Classic。
下载完成后,一路安装就可以了。
Fiddler工具条讲解
开始抓包
给接口添加备注信息
重放请求
- 单次重放请求
选中请求,点击Replay按钮或者键盘R键。
- 多次重放请求
选中请求,按Shift+R键。
注意:Fiddler请求是串行的,不是并发。
删除请求
选中请求,键盘按Delete请求。
如果想要一次删除多个请求,先按Ctrl键,选中需要保留的请求,再按Shift+Delete键,批量删除其他请求。
另外也可以通过Fiddler上的remove图标移除指定请求。
注意:Ctrl + X是删除所有请求的快捷键。
断点
-
为什么要打断点呢?
比如一个购买的金额输入框,输入框前端做了限制100-1000,那么我们测试的时候,需要测试小于100的情况下。很显然前端只能输入大于100的。这是我们可以先抓到接口,修改请求参数,绕过前端,传一个小于100的数,检查服务端的功能是否OK。
也就是说接口测试其实是不需要管前端的,主要测后端的功能。
-
Fiddler可以修改以下请求
- Fiddler设置断点,可以修改HTTP请求头信息,如修改Cookie,User-Agent等 - 可以修改请求数据,突破表单限制,提交任意数字,如充值最大100,可以修改成10000 - 拦截响应数据,修改响应体,如修改服务端返回的页面数据
-
断点的两种方式
- before response:这个是打在request请求的时候,未到达服务器之前
- after response:也就是服务器响应之后,在Fiddler将响应传回给客户端之前。
-
全局断点设置
-
状态栏空白处点击可以设置快捷设置断点。选中请求,点一下,再按一下键盘R。
- 点一下是请求前断点。
- 点两下是响应后的断点
- 点一下是请求前断点。
- 释放断点请求
可参考文章:https://blog.csdn.net/FloraCHY/article/details/121283150
流模式
一般默认使用的是缓冲模式。
解码
点击Decode按钮,对所有请求进行解码。
保存会话
Any Process
选择需要监听的程序。
鼠标点击并按住不放,选中需要抓包的应用。
Find
查找请求。
快捷键:Ctrl + F
save
保存所有的请求,方便定位问题。保存的文件后缀是*.saz。
截图
计时器
点一下开始计时,再点一下结束计时。可以用来辅助查看请求响应时间。
浏览器
快捷打开浏览器。先选中请求,再点击Browser按钮。
清除IE缓存
编码解码
使用场景:比如密码需要使用MD5加密,用这个工具就可以实现,不需要去网上额外找其他工具。
分离面板
online
显示本机的在线信息。
Fiddler会话列表讲解
会话已有列说明
Fiddler抓取到的每条http请求称为一个session。
主要包含了请求的ID编号,状态码,协议,主机名,URL, 内容类型, body大小,进程信息,自定义备注等信息。
- [#]: HTTP Request的顺序,从1开始,按照页面加载请求的顺序递增。
- [result]:HTTP的响应状态
- [Protocol]:请求使用的协议,如HTTP/HTTPS/FTP
- [Host]:请求地址的域名
- [URL]:请求的服务器路径和文件名,也包括GET参数
- [Body]:请求的大小,以Byte为单位
- [Caching]:请求的缓存过期时间或缓存控制,header等值
- [Content-Type]:请求的响应类型
- [Process]:发出此请求windows进程以及进程ID
- [Comments]:用户通过脚本或者右击菜单给此session增加的备注
- [Custom]:用户可以通过脚本设置的自定义值
Fiddler添加IP
代码: FiddlerObject.UI.lvSessions.AddBoundColumn(“Server IP”, 120, “X-HostIP”);
添加这行代码到Fiddler ScriptEditor的static function Main(){}里面。然后重启fiddler就可以了。
注意:如果遇到这个报错 (Failed to launch the editor for FiddlerScript. JSEditor)
解决办法:
系统找不到指定的文件,文件损失,建议卸载重新安装
Fiddler命令行+状态栏
命令行帮助文档:https://docs.telerik.com/fiddler/knowledge-base/quickexec
Capturing: 显示的时候表示在捕获请求, 点击可切换暂停捕获请求。
All Processes: 表示当前捕获请求的程序。默认是所有程序。
Fiddler辅助标签+工具
Statistics (统计)
HTTP请求的性能和其他数据分析,如DNS解析的时间,建立TCP/IP连接的时间消耗等信息。
Inspectors(检查器)
可以多种方式查看请求的请求报文和响应报文的相关信息。
AutoResponder(自动响应器)
用于拦截某一请求,进行如下操作:
- 重定向本地的资源
- 使用Fiddler的内置响应
- 自定义响应
这个功能非常重要!
具体操作待补充
Composer
填写相关请求信息,执行请求。
Filter过滤器
断点的应用
对于测试工程师来说,断言的最大应用在于极端测试。
比如我想看前端页面对于无数据列表如何处理,可以不用删除测试数据。可以通过设置请求后的断点,让接口返回空数据,去查看前端页面的处理方式。
局部断点通过命令设置,命令:bpu 请求名称。
其他断点介绍见上方。
弱网测试
捕获HTTPS请求
如果需要捕获HTTPS请求,需要在Tools>Options>HTTPS中设置Capture HTTPS CONNECTS。安装HTTPS证书。
如果操作后仍旧不能捕获HTTPS请求,可以在Action中设置一下Trust Root Certificate 并重启Fiddler。
Firefox抓包
Firefox默认是不使用代理服务器的。我们需要进行配置。可以选择使用系统代理或者手动代理设置。然后给firefox安装fiddler证书就可以了。
选型-高级-网络-使用系统代理
或者使用手动代理配置
安装证书。
先从fiddler导出证书。然后安装到firefox。重启浏览器就可以了~
IOS APP抓包
Fiddler设置
- 点击Tools>Fiddler Options >Connections
- 勾选Allow remote computers to connect
- 重启fiddler
- 确保防火墙允许Fiddler远程可以远程
- IOS设备连接WIFI (本机和手机要在同一个网络中)
- 确保IOS设备可以访问到http://FiddlerMachineIP:8888, 该地址会返回Fiddler Echo Service页面
IOS设备设置
- 点击设置>WIFI>打开连接的wifi设置
- 点击配置代理>手动
- 设置IOS代理服务器地址为Fiddler所在主机的IP地址
- 设置端口为Fiddler监听的端口
- 点击存储,保存代理设置
- 打开一个非HTTPS的网站,此时Fiddler已经可以捕获请求了
IOS设备抓取HTTPS请求
- 在IOS设备打开浏览器,访问http://ipv4:8888/
- 点击Fiddler Echo Service页面底部FiddlerRoot certificate下载证书
- 打开FiddlerRoot.cer文件并安装
- 安装成功后,在通用>关于本机>证书信任设置中,信任刚安装的Fiddler证书
- safari打开https://www.baidu.com,就可以了
Android 设备设置
Fiddler设置跟上面一样。
- 手机打开设置>WLAN>连接上的WLAN设置
- 点击代理>手动,设置主机名为Fiddler所在主机的IP, 端口为Fiddler监听端口
- 打开Android设备浏览器,访问http://ipv4:8888/
- 点击页面底部FiddlerRoot certificate下载证书
- 打开设置>更多设置>系统安全>加密与凭据>从存储设备安装
- 选择下载好的FiddlerRoot.cer进行安装
- 浏览器打开https://www.baidu.com就可以抓包了
- 记住:测试完成后关闭代码,不然无法上网。
(安卓投屏设备:ApowerMirror)
Willow插件
下载插件的地址:https://www.telerik.com/fiddler/add-ons
下载Willow的地址:http://qzonetouch.github.io/commonWidget/willow
我们在测试过程中经常需要切换不同的环境进行测试,那么在fiddler中自带hosts工具维护比较麻烦。当然也可以通过AutoResponder来设置规则,但是比较麻烦。我们用Willow来 管理比较方便很多。