用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
2rules.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
9rules.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
10www.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
2pattern 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
6www.ifeng.com resHeaders://{test-resHeaders.json}
// test-resHeaders.json 内
x-test1: value1
x-test2: value2
x-testN: valueN
如下面这种:1
2
3
4pgv_pvi: 6973761536
pgv_pvi: 6973761536
x_host_key: xxx-xxx
csrftoken: xxx
还可以通过 headerReplace
替换字符的方式修改请求或响应。(我感觉只有你想不到,没有他做不到啊啊啊优秀!)
删除指定的请求响应头字段,也可以通过reqHeaders、resHeaders把字段设置为空字符串1
2pattern 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
4www.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
4pattern ua://newUA
www.ifeng.com ua://Mozilla/5.0
// 把完整UA存在Values里面
www.ifeng.com ua://{test-ua}
修改content-type
分为请求的content-type
以及响应的content-type
。如:1
2www.ifeng.com reqType://text
www.ifeng.com reqType://application/x-www-form-urlencoded
总结
whisle
还有很多好用的地方,比如compose
请求、插件、日志的导出、回放等真的太好用了。