HttpCanary更多资料,点我!!!javascript
HttpCanary于v2.11.0版本上线了正则匹配注入功能。顾名思义,就是使用正则表达式或者匹配字符串,动态修改网络请求数据中的部分数据。css
举个例子:html
{
"date": "30日星期天",
"high": "高温 30℃",
"fengli": "<![CDATA[<3级]]>",
"low": "低温 23℃",
"fengxiang": "西南风",
"type": "多云"
}
复制代码
咱们但愿将网络请求体中这段数据中的符号℃修改成中文摄氏度,即:java
{
"date": "30日星期天",
"high": "高温 30摄氏度",
"fengli": "<![CDATA[<3级]]>",
"low": "低温 23摄氏度",
"fengxiang": "西南风",
"type": "多云"
}
复制代码
若是使用常规的断点方式手动修改(例如HttpCanary的动态注入)操做起来极为不方便,可是若是使用正则表达式或者字符串匹配来动态替换修改则极为容易。HttpCanary于v2.11.0版本开始正式支持此功能,这篇博客主要讲解如何使用正则匹配功能修改数据。正则表达式
正则匹配注入功能只能修改文本类型数据,若是是图片、视频等非文本则不支持,HttpCanary会根据MimeType来断定是否支持。目前支持的MimeType类型以下:json
若是有其它文本类型的MimeType不在以上范围内,能够反馈给我,后面版本加上。api
此外,目前正则匹配注入功能还限制了只适用小于32k的数据量,大数据量暂时尚不支持。网络
正则匹配注入须要依赖于静态注入器,它是静态注入器的一种使用方式。首先,首页选定须要注入的请求长按,选择静态注入,打开静态注入编辑页面。app
当须要修改请求体或者响应体的时候,点击相应编辑按钮,而后选择规则替换,进入规则编辑器。编辑器
字符串匹配替换是指查找目标数据中与指定字符串彻底匹配的子字符串并进行替换,例如将全部 “℃” 替换成 “摄氏度”。
测试范例:
https://www.apiopen.top/weatherApi?city=南京
复制代码
咱们在规则编辑器中新增一个规则(无需勾选正则表达式):
新建好规则后,能够经过预览对比下注入效果。
规则匹配注入支持多个规则同时应用,例如能够同时将code=200修改成code=400:
建立完成注入器后,咱们经过RestClient实际发送请求看下注入效果。
注入效果很是完美!
字符串匹配替换虽然可以解决绝大多数问题,可是很明显仍然不够灵活。
好比说,我但愿将下方数据中的fengxiang值 “西南风” 替换为 “天然风”,可是原始请求结果中不必定是 “西南风”,也多是 “东北风”、“东风”、“西风”等等风。这种状况除非枚举,不然很难作到完美替换。这时候就是正则表达式上场的时候了。
{
"date": "30日星期天",
"high": "高温 30℃",
"fengli": "<![CDATA[<3级]]>",
"low": "低温 23℃",
"fengxiang": "西南风",
"type": "多云"
}
复制代码
咱们一样在规则编辑器中添加一条规则,不过要勾选上正则表达式。写一个简单的正则表达式来动态匹配“xx风”。
预览效果以下:
完美!
一样的,正则表达式支持使用$1来匹配()内的值进行替换,再次以上面的json数据为例,我但愿修改为以下效果:
{
"date": "30日星期天",
"high": "30摄氏度 高温",
"fengli": "<![CDATA[<3级]]>",
"low": "23摄氏度 低温",
"fengxiang": "西南风",
"type": "多云"
}
复制代码
其中 “高温 30℃” 修改成了 “30摄氏度 高温”,“低温 23℃” 修改成了 “23摄氏度 低温”,也就是既将 “℃” 符号修改成 “摄氏度” 又将高低温移动到了后面。
这种状况就可使用正则表达式的 $和() 来灵活替换,正则以下:
其中第一个括号内的内容使用$1保留,第二个括号内的内容使用$2保留,替换时进行从新组装。效果以下:
最后,使用RestClient实际请求看下效果: