配置
常见应用场景:断点,修改请求,修改响应
添加菜单栏选项快速切换环境
修改响应json中某些value值
模拟弱网,过滤,下载老版本ipa
认识fiddler
Fiddler 是位于客户端和服务器端的 HTTP 代理,也是目前最常用的 http 抓包工具之一 。
它能够记录客户端和服务器之间的所有 HTTP 请求,可以针对特定的 HTTP 请求,分析请求数据、设置断点、调试web 应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web 调试的利器。
以下主要以app抓包为例
配置fiddler
http抓包配置
- 开启代理 (Tools→Options→Connections)并勾选
allow remote computers to connect
- 记住默认端口为8888(可修改)
- 手机设置代理
- 手机和电脑连接同一网络,手机在wifi高级设置中设置代理-手动
- 服务器主机名填写电脑ip(在电脑终端可以通过ipconfig查看主机ip)
- 端口8888(与fiddler端口一致)
至此,fiddler 就可以捕获到手机客户端发起的 http 请求和服务端的返回的响应了。然而,由于 http 在传输过程中不加密问题,因此现在很多站点为了安全,都会使用 https 传输协议来保证信息安全。
https和http的区别
这里不做展开,可参看如下博文
我是这样理解 HTTP 和 HTTPS 区别的
https抓包配置
- fiddler 开启 https 抓包 (Tools→Options→HTTPS),勾选
capture https connects
- 手机安装证书,手机浏览器访问主机ip:端口,如我的为192.168.0.11:8888
各个品牌的手机的安装证书有点区别,可自行百度
设置断点
- 所有请求断点
菜单栏rules-automatic breakpoints-before/after responses(请求前/响应后)请求前:在发给服务器之前,可用于修改请求数据,然后发送给服务器
响应后:在服务器响应后发送到客户端之前,可用于修改响应数据,发送给客户端
go
命令放开所有断点 - 指定请求断点(常用)
bpu url
url 为指定请求
清除断点bpu
修改请求
如上介绍,可采用指定url来断点并修改请求数据,伪装数据发送到服务器
例子
比如某一上传设备信息的接口https://xxx/upload/deviceinfo
- 请求body如下:
{
"device": {
"brand": "HUAWEI",
"model": "PAR-AL00",
"os_type": 1,
"os_version": {
"major": 9,
"micro": 0,
"minor": 0
},
"screen_density": 3.0,
"screen_size": {
"height": 2252,
"width": 1080
}
}
}
- 输入命令
bpu https://xxx/upload/deviceinfo
- 重启app再次上传调用该接口时,则会被breakpoints
- 快速修改请求内容,如修改band为xiaomi,然后点击
run to completion
完成请求 - 入库校验,可以看到修改请求成功
修改响应
如上介绍,可采用指定url来断点,修改服务器返回的数据,并伪装数据发送给客户端
例子
比如某一获取标签的接口为https://xxxx/get/lables
- 输入命令
bpafter https://xxxx/get/lables
(或bpu https://xxxx/get/lables
) - 再次触发调用该接口,则会被breadpoints
- (若之前用的是bpu,则需要先点击break on response),快速修改json响应中的值(响应raw状态修改),然后点击
run to completion
完成响应 - 查看客户端标签展示
autoresponder
这种方法适用于同时改多个请求的响应,如某些请求同时响应404,某些请求的响应都要修改
- 把需要修改的请求,拖入 AutoResponder
- 配置返回的内容到某路径下的文件中
- 开启规则(一定要记得开启规则)
修改响应json中的value值并添加菜单栏切换选项
例子
如某一身份认证的接口为https://xxx//imuser/realname/check
-
添加菜单栏切换选项
自定义脚本(FiddlerScript - 修改脚本 - save script)
在 class Handlers 中添加如下脚本:RulesString("&mock", true) RulesStringValue(0,"mock身份认证", "realname") RulesStringValue(1,"mock建群认证", "certcheck") public static var MOCK: String = null;
-
在
function OnBeforeResponse
中添加如下脚本if (oSession.PathAndQuery=="/im/user/realname/check") { if ( MOCK == 'realname') { var responseStringOriginal = oSession.GetResponseBodyAsString(); var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal); responseJSON.JSONObject['Data']['Result']=true; var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject); oSession.utilSetResponseBody(responseStringDestinal); } } if (oSession.PathAndQuery=="/im/v2/team/user/cert/check") { if ( MOCK == 'certcheck') { var responseStringOriginal = oSession.GetResponseBodyAsString(); var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal); responseJSON.JSONObject['Data']['Result']['status']=1; var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject); oSession.utilSetResponseBody(responseStringDestinal); } }
-
重启 fiddler 后生效
-
则可以在菜单栏rules看到新增的mock选项了
模拟弱网
修改如下请求时间和响应时间:
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded 300.
oSession["request-trickle-delay"] = "300";
// Delay receives by 150ms per KB downloaded 150.
oSession["response-trickle-delay"] = "1000"; }
并开启规则:rules-performance-simulate mode speeds
filters
为了便于查看,过滤一些不需要的或者只显示一些自己需要的请求
在filters中设置,如过滤图片请求,filters-response type and size - hide image/*
composer
模拟请求,实际工作中用postman替代,可参看postman工具的使用
从itunes下载老版本ipa
如果项目是应用市场类涉及到应用升级,或者是要用iOS来做一些爬虫,往往都需要下载一些应用的老版本
注:itune 版本必须小于等于 12.6,先登陆上自己的apple id
- 不设置断点的情况下获取到需要下载app所有的版本string(自己仔细查看下载app是对应的请求吧)
- 设置断点,/bugProduct接口(应该是这个)
- 修改请求string为低版本的string