HTTPS、Websocket 需要开启 HTTPS 拦截才可以正常抓包及使用所有匹配模式,否则只能用域名匹配
whistle的匹配模式(pattern)大体可以分为域名、路径、正则、精确匹配、通配符匹配。其中 正则匹配、精确匹配,通配符匹配支持取非,即 !pattern ,表示不匹配。 pattern 关键字符:^(通配路径表示符)、$(精确匹配)、*(通配符)、!(取非)
域名匹配:
域名匹配,不仅支持匹配某个域名,也可以限定端口号、协议(http、https、ws、wss、tunnel),如果 operatorURI 不为请求路径, pattern 和 operatorURI 位置可以调换;
# 匹配域名www.test.com下的所有请求,包括http、https、ws、wss,tunnel
www.test.com operatorURI
# 匹配域名www.test.com下的所有http请求
http://www.test.com operatorURI
# 匹配域名www.test.com下的所有https请求
https://www.test.com operatorURI
# 上述匹配也可以限定域名的端口号
www.test.com:8888 operatorURI # 8888端口
www.test.com/ operatorURI # http为80端口,其它443端口
其中, tunnel 为 Tunnel代理请求的协议, tunnel协议的 url 只有域名没有路径
路径匹配
指定匹配某个路径,也可以限定端口号、协议(http、https、ws、wss)等等, 如果operatorURI不为请求路径, pattern 和 operatorURI 位置可以调换
# 限定请求协议,只能匹配http请求
http://www.test.com/xxx operatorURI
http://www.test.com:8080/xxx operatorURI
# 匹配指定路径下的所有请求
www.test.com/xxx operatorURI
www.test.com:8080/xxx operatorURI
*/xxx operatorURI #使用了通配符匹配特性
正则匹配
正则的语法及写法跟js的正则表达式一致,支持两种模式: /reg/、、/reg/i 忽略大小写,支持子匹配,可以通过正则的子匹配把请求url里面的部分字符串传给 operatorURI, pattern 和 operatorURI 可以调换
#匹配所有请求
* operatorURI
#匹配 url 里面包含某个关键字的请求,且忽略大小写
/keyword/i operatorURI
# 利用子匹配把url里面的参数带到匹配的操作uri
# 下面正则将把请求里面的文件名称,带到匹配的操作uri
# 最多支持10个子匹配 $0...9,其中$0表示整个请求url,其它跟正则的子匹配一样
/[^?#]\/([^\/]+)\.html/ protocol://...$1...
精确匹配
与上面的路径匹配不同,路径匹配不仅匹配对应的路径,而且还会匹配该路径下的子路径,而精确匹配只能指定的路径,只要在路径前面加$ 即可变成精确匹配,类似 $url operatorURI
,pattern和operatorURI位置可以调换。
-
包含请求协议
$http://www.test.com operatorURI $https://www.test.com/xxx? operatorURI
这种情况分别只能匹配这两种请求:
http://www.test.com # 浏览器会自动改为http://www.test.com/ https://www.test.com/xxx?
-
不包含请求协议
$www.test.com/xxx operatorURI
这种情况可以匹配如下四种请求:
http://www.test.com/xxx https://www.test.com/xxx ws://www.test.com/xxx wss://www.test.com/xxx
精确匹配支持非匹配 !$url
通配符匹配
域名、路径匹配不能满足一些复杂的情况,虽然正则匹配可以解决所有匹配问题,但是门槛有点高,且涉及转义及设置匹配的起始位置等,对一些常用whistle提供了一些更简单的配置方式,包含通配符匹配,通配域名匹配、通配路径匹配:
通配符匹配:
匹配模式必须以 ^开头,如果需要限制结束位置可以用 $, *为通配符,支持通过$0…9获取通配符匹配的字符串,其中$0表示整个请求的url
# 以 ^ 开头
^www.example.com/test/*** referer://http://www.test.com/$1
# 限定结束位置
^www.example.com/test/***test$ referer://http://www.test.com/$1
...