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實際請求看下效果: