whisle常用配置总结

whisle已经差不都两年多了,真是个很棒的工具,除了配色,真的没有地方可以吐槽。下面总结下我经常用的并且好用的配置。

whisle


转发

场景为:与业务联调,需要业务App内嵌我们H5,我们可以随意抓包找业务App内的一个H5链接,转发成我们的页面即可模拟到APP打开H5页面。

1
/^https?:\/\/isee.weishi.qq.com\/(.*)\?(.*)/ redirect://https://xxxx


修改回包(mock数据)

whisle内写如下规则:

1
https://api.xxx resBody://{valueName}

然后再在 values 里面建立名为 valueName 的配置项并将需要的json数据填入即可。

或者使用resScript如:

1
api.xxx resScript://{valueName.js}

再在values 里建立 valueName.js 的配置项,并且进行如下的配置

1
2
rules.push(url + ' resBody://{res}');
values['res'] = '{"ret" : 0,"msg" : "ok","recomm_info" : {}}'

若是想模拟 jsonp则:

1
api.xxx resScript://{valueName.js}

在values里拿到jsonp callback的值,填入回包即可模拟

1
2
3
4
5
6
7
8
9
rules.push(url + ' resBody://{res1}')

var queryStr = parseUrl(url).query
var queries = parseQuery(queryStr)

var jsonpMethod = queries.format.substr(6)

var res1 = {"ret" : 0,"msg" : "ok","recomm_info" : {}}
values['res1'] = jsonpMethod + '(' + JSON.stringify(res1) + ')'

意思就是其实变量什么的都能拿到,自己去想办法构造即可,再举例为:

1
2
3
4
5
6
7
8
9
10
www.ifeng.com resScript://{resScript.js}

// resScript.js:
const options = parseUrl(url);
rules.push(`${options.host} resCookies://{cookies.json}`);
values['cookies.json'] = {
serverIp,
clientIp,
from: 'resScript'
};


proxy(http-proxy)

设置 HTTP 代理,一个比较典型的场景,是想把某个域名的请求,定位到一个具体ip:port查问题。

1
2
pattern proxy://ip:port
www.detail.tmall.com proxy://101.231.104.82:80


模拟 404、模拟慢反应

某些情况需要验证某些特殊的返回码或者延迟效果来看前端的反馈。

1
2
3
4
5
6
7
8
# 模拟404 或者 500
/wechat.js/ statusCode://404
www.ifeng.com statusCode://500

# 延迟2s后返回结果
/xxx.php/ resDelay://2000
# 延迟3s后发起请求
/xxx.php/ reqDelay://3000


本地调试

某些时候,现网出了问题,我们需要看下是什么情况,可以把某个有问题的文件使用本地文件从而进行定位和调试。

1
apixxxx.js file:///Users/seven/apixxxx.js


修改删除响应头、请求头

可以利用resHeaders或者reqHeaders修改 headers 里的内容

1
2
3
4
5
6
www.ifeng.com resHeaders://{test-resHeaders.json}

// test-resHeaders.json 内
x-test1: value1
x-test2: value2
x-testN: valueN

如下面这种:

1
2
3
4
pgv_pvi: 6973761536
pgv_pvi: 6973761536
x_host_key: xxx-xxx
csrftoken: xxx

还可以通过 headerReplace替换字符的方式修改请求或响应。(我感觉只有你想不到,没有他做不到啊啊啊优秀!)

删除指定的请求响应头字段,也可以通过reqHeaders、resHeaders把字段设置为空字符串

1
2
pattern delete://req.headers.xxx|req.headers.x22|res.headers.yyy|headers.zzz
/./ delete://req.headers.x-forwarded-for


设置不拦截

禁用https拦截使用 disable://intercept,对iap支付或微信支付某些接口抓包会影响他的功能,因此需要取消拦截。

1
2
3
4
5
*.weixin.qq.com disable://intercept
api.mch.weixin.qq.com disable://intercept
**.apple.com disable://intercept #屏蔽iap支付抓包
**.icloud.com disable://intercept
http://mp.weixin.qq.com https://mp.weixin.qq.com

还有其他的禁用也用的比较多的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 禁用请求的缓存,只要经过代理且匹配到的请求都不会使用缓存
wwww.test.com disable://cache

# 禁用请求和响应的cookie
wwww.test.com disable://cookie

# 只禁用请求的cookie
wwww.test.com disable://reqCookie # 也可以写成复数形式reqCookies

# 删除ua
wwww.test.com disable://ua

# 删除referer
wwww.test.com disable://referer

# 删除csp策略
wwww.test.com disable://csp (经常用,太好用了)

# 禁用timeout,默认情况下whistle对每个请求如果36s内没有发生数据传输,会认为请求超时
wwww.test.com disable://timeout

# 把301转成302,防止cache
wwww.test.com disable://301

# 禁用https拦截
wwww.test.com disable://intercept

# 不缓存远程的dns(通过whistle配置的host是不会缓存),主要用于测试网页的极端情况的加载速度
wwww.test.com disable://dnsCache

# 禁用代理服务器请求链接复用
wwww.test.com disable://keepAlive

# 删除请求头 `x-requested-with`
wwww.test.com disable://ajax

# 也可以同时禁用多个
www.example.com disable://cache|cookie|ua|referer|csp|timeout|301|intercept|dnsCache|keepAlive


ignore

ignore用于忽略指定协议的匹配规则,也可以忽略当前配置的匹配规则。如

1
2
3
4
www.example.com/test-hosts 127.0.0.1:8080
// 忽略 xxx路径的 host 规则
www.example.com/test-hosts/xxx ignore://host
www.example.com/test-hosts/yyy ignore://host|socks


urlParams 修改请求参数

有时候我们在较长的url上修改请求参数会比较麻烦,使用这个可以清晰的修改:

1
2
3
4
5
6
7
8
// 修改请求参数,配置方式:
pattern urlParams://filepath
// filepath为Values里面的{key}或者本地文件(如:e:\test\xxx、e:/test/xxx、/User/username/test/xxx等):

field1: value1
field2: value2
filedN: valueN
// www.ifeng.com urlParams://(test=1)


ua

除了使用chrome模拟工具进行修改ua外,还可以使用whisle里的ua进行修改。如:

1
2
3
4
pattern ua://newUA
www.ifeng.com ua://Mozilla/5.0
// 把完整UA存在Values里面
www.ifeng.com ua://{test-ua}


修改content-type

分为请求的content-type以及响应的content-type。如:

1
2
www.ifeng.com reqType://text
www.ifeng.com reqType://application/x-www-form-urlencoded


总结

whisle还有很多好用的地方,比如compose请求、插件、日志的导出、回放等真的太好用了。