Charles配置

  • 代理配置

    image-20210325235141364

    抓取HTTPS的设置

    image-20210325235537353

    image-20210325235624115

    完成以上配置就可以避免因为抓不到https而出现红色的unknown

  • 证书安装

    ![image-20210325234322059](../../../../../Library/Application Support/typora-user-images/image-20210325234322059.png)

    根据需要安装证书

    image-20210325234910451

  • 数据抓取

    • 完成Charles和Mumu的配置,接下来就到抓包分析数据了,下面内容会详细讲解

实战配置说明

抓包工具Charles

Charles抓包工具需要设置代理抓取mumu模拟器中的请求:

  1. 安装证书
  2. 代理设置

详细见上面步骤

模拟器Mumu

Mumu模拟器中配置Charles的代理

  • 设置–>WLAN–>鼠标左键长按–>修改网络–>代理–>手动–>设置服务器主机名和端口号–>保存

    image-20210325233444030

    image-20210325233519849

    image-20210325233638441

Charles查看HTTP请求和响应

通过抓包得到的数据,分析HTTP协议构成,请求和响应,注意:Charles默认设置是不显示Request和Response的标签,具体如下:

image-20210326113034431

如果我们要看详情的Request和Response,我们需要进行设置

image-20210326113504030

之后,会提示需要重新启动Charles

image-20210326113550306

完成配置后,我们就看到了Request和Response的标签页

image-20210326113639472

Request和Response分开显示会更清晰些,使用哪种方式看个人习惯

maplocal修改数据

image-20210326104606485

  1. Charles抓取数据包,并复制响应到本地

    image-20210326104831964

  2. 本地使用工具格式化输出JSON,找到股票名称进行修改

    image-20210326105322608

  3. 使用maplocal修改指向本地的数据

    image-20210326105702595

    image-20210326110015741

    ​ 点击[OK]保存

  4. 完成以上配置,在回到App查看界面(需要刷新)内容

    image-20210326110159845

json数据处理神器-jq

jq的详细使用,请查看文章:https://jinglv.github.io/2020/12/26/linux/jq/

过滤方式

  • 这是一个过滤器,它接受输入,并将其不变地生成为输出
  • .key过滤
  • .[index]通过角标过滤
  • .[index-start:index-end]前闭后开

将上面保存到本地的响应,使用jq过滤

1
2
bogon:~ jinglv$ cat /Users/jinglv/Documents/quote.json | jq '.data.items[].quote.name'
"小花花集团"

常见用法

  • 组合

    • echo '{"user":"xiaohong","titles":["java class","python class"]}' | jq '{(.user):.titles}'

      1
      2
      3
      4
      5
      6
      7
      bogon:~ jinglv$ echo '{"user":"xiaohong","titles":["java class","python class"]}' | jq '{(.user):.titles}'
      {
      "xiaohong": [
      "java class",
      "python class"
      ]
      }
  • 计算

    • echo "10" | jq '(.+2)*5'
    • echo null | jq '{a:1}+{b:2}+{c:3}+{a:42}'
    • echo '["xml", "yaml", "json"]' | jq '. - ["xml"]'
    • echo '{"a":5}' | jq '.a+=10'
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    bogon:~ jinglv$ echo "10" | jq '(.+2)*5'
    60
    bogon:~ jinglv$ echo null | jq '{a:1}+{b:2}+{c:3}+{a:42}'
    {
    "a": 42,
    "b": 2,
    "c": 3
    }
    bogon:~ jinglv$ echo '["xml", "yaml", "json"]' | jq '. - ["xml"]'
    [
    "yaml",
    "json"
    ]
    bogon:~ jinglv$ echo '{"a":5}' | jq '.a+=10'
    {
    "a": 15
    }
  • 获取长度

    • echo '[[1,2],"string", ["a":2], null]' | jq '.[] | length'

      1
      2
      3
      4
      5
      bogon:~ jinglv$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
      2
      6
      1
      0

测试实战

以上完成了对应非配置,接下来我们进行实战,场景如下:

  • 修改股票列表某支股票的名字
    • 正常修改
    • null值修改
    • ‘ ‘修改

通过修改字段的类型,查看客户端在获取接口中的数据不同的处理,避免App出现异常

1
2
bogon:~ jinglv$ cat /Users/jinglv/Documents/quote.json | jq '.data.items[0].quote.name=" "' > quote1.json
bogon:~ jinglv$ cat /Users/jinglv/Documents/quote.json | jq '.data.items[0].quote.name=null' > quote2.json

生成新的数据,使用Charles maplocal配置文件,再到App上查看界面显示是否有异常等