配置
常见应用场景:断点,修改请求,修改响应
添加菜单栏选项快速切换环境
修改响应json中某些value值
模拟弱网,过滤,下载老版本ipa

认识fiddler

Fiddler 是位于客户端和服务器端的 HTTP 代理,也是目前最常用的 http 抓包工具之一 。
它能够记录客户端和服务器之间的所有 HTTP 请求,可以针对特定的 HTTP 请求,分析请求数据、设置断点、调试web 应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web 调试的利器。

以下主要以app抓包为例

配置fiddler

http抓包配置

  1. 开启代理 (Tools→Options→Connections)并勾选allow remote computers to connect
  2. 记住默认端口为8888(可修改)
  3. 手机设置代理
    • 手机和电脑连接同一网络,手机在wifi高级设置中设置代理-手动
    • 服务器主机名填写电脑ip(在电脑终端可以通过ipconfig查看主机ip)
    • 端口8888(与fiddler端口一致)

至此,fiddler 就可以捕获到手机客户端发起的 http 请求和服务端的返回的响应了。然而,由于 http 在传输过程中不加密问题,因此现在很多站点为了安全,都会使用 https 传输协议来保证信息安全。

https和http的区别

这里不做展开,可参看如下博文
我是这样理解 HTTP 和 HTTPS 区别的

https抓包配置

  1. fiddler 开启 https 抓包 (Tools→Options→HTTPS),勾选capture https connects
  2. 手机安装证书,手机浏览器访问主机ip:端口,如我的为192.168.0.11:8888

各个品牌的手机的安装证书有点区别,可自行百度

设置断点

  1. 所有请求断点
    菜单栏rules-automatic breakpoints-before/after responses(请求前/响应后)

    请求前:在发给服务器之前,可用于修改请求数据,然后发送给服务器
    响应后:在服务器响应后发送到客户端之前,可用于修改响应数据,发送给客户端
    go命令放开所有断点

  2. 指定请求断点(常用)
    bpu url
    

    url 为指定请求
    清除断点bpu

修改请求

如上介绍,可采用指定url来断点并修改请求数据,伪装数据发送到服务器

例子

比如某一上传设备信息的接口https://xxx/upload/deviceinfo

  1. 请求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
		}
	}
}
  1. 输入命令bpu https://xxx/upload/deviceinfo
  2. 重启app再次上传调用该接口时,则会被breakpoints
  3. 快速修改请求内容,如修改band为xiaomi,然后点击run to completion完成请求
  4. 入库校验,可以看到修改请求成功

修改响应

如上介绍,可采用指定url来断点,修改服务器返回的数据,并伪装数据发送给客户端

例子

比如某一获取标签的接口为https://xxxx/get/lables

  1. 输入命令bpafter https://xxxx/get/lables(或bpu https://xxxx/get/lables)
  2. 再次触发调用该接口,则会被breadpoints
  3. (若之前用的是bpu,则需要先点击break on response),快速修改json响应中的值(响应raw状态修改),然后点击run to completion完成响应
  4. 查看客户端标签展示

autoresponder

这种方法适用于同时改多个请求的响应,如某些请求同时响应404,某些请求的响应都要修改

  • 把需要修改的请求,拖入 AutoResponder
  • 配置返回的内容到某路径下的文件中
  • 开启规则(一定要记得开启规则)

修改响应json中的value值并添加菜单栏切换选项

例子

如某一身份认证的接口为https://xxx//imuser/realname/check

  1. 添加菜单栏切换选项
    自定义脚本(FiddlerScript - 修改脚本 - save script)
    在 class Handlers 中添加如下脚本:

    RulesString("&mock", true)
    RulesStringValue(0,"mock身份认证", "realname")
    RulesStringValue(1,"mock建群认证", "certcheck")
    public static var MOCK: String = null;
    
  2. 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);
        }
    }
    
  3. 重启 fiddler 后生效

  4. 则可以在菜单栏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

  1. 不设置断点的情况下获取到需要下载app所有的版本string(自己仔细查看下载app是对应的请求吧)
  2. 设置断点,/bugProduct接口(应该是这个)
  3. 修改请求string为低版本的string