使用whistle进行接口返回数据的替换

3,793 阅读2分钟

场景

假设我们需要更改数据返回接口中的某一个字段,网页中的代码可能会根据这个字段来更改显示的内容,我们又不想去麻烦后端给我们添加权限,那么就可以使用代理工具直接更改返回的数据包,这里我使用的工具是whistle. 具体的使用方法可以查看官方文档

github.com/avwo/whistl…

添加rules

test.xxxx.com/page/query resReplace://{test-resReplace.json}

添加values

test-resReplace.json

{ 
  "\"creator\":\"flyu\"": "creator: \"bravexue\"",
  "\"hasAuth\":false": "hasAuth: true"
}

这其中的难点就是values中替换规则的编写,根据我的摸索,whistle会以json文件中的key作为匹配模式,将匹配的结果替换为当前key对应的值。

官网的示列如下,但是这个我真的看了很久都没搞懂。

image.png

官网示列的意思大概是,这个json中的key可以为一个正则,key对应的value中可以使用正则中的分组匹配符。但是这里有一个坑,json中的key必须为字符串,如果你直接使用官网的列子是不会生效的,你需要使用双引号将key值包裹起来

{
    "/user=([^&])/ig": "user=$1$1"
}

这是第一个坑,我遇到的问题是,我需要将返回结果中的某一个字段直接更改其值,如果我直接进行匹配,是无法生效的。

{
    "hasAuth:false": "hasAuth:true"
}

我们以文本的方式查看接口的返回值

image.png

会发现返回值实际是 "hasAuth":false 也就是说在hasAuth这个字段两端是有双引号的,问题是json的key值我们已经使用了双引号,而json中又不允许使用单引号,所以此时我们应该怎么办呢,可以使用转译字符

我尝试了如下方法,然后就OK了

{
    "\"hasAuth\":false": "hasAuth:true"
}