靜態注入器是HttpCanary最強大的功能之一,可以實現對Http請求數據和響應數據的攔截修改。靜態注入器需要先選定一個請求,然后對其進行預編輯,編輯完成后便可對后續的相同請求進行自動修改。
比如App發往服務器的請求為:https://test.com?city=beijing ,我們可以使用HttpCanary的靜態注入器將參數值beijing修改為nanjing 。對App的開發和測試而言,可以模擬很多不同場景的請求,來提高測試效率。
本篇文章將詳細講解如何使用靜態注入器。
測試請求范例
https://www.apiopen.top/weatherApi?city=北京
復制代碼
創建靜態注入器
首先,長按抓包記錄,在彈框中選擇“靜態注入“,然后給注入器命名(方便后面對注入器進行管理)。

命名完成后,進入注入器編輯界面。編輯頁面會展示出此請求的所有Http協議數據,包括請求行(Start Line)、請求頭(Headers)、請求體(Body)、狀態行(StatusLine)、響應頭(Headers)、響應體(Body)。
左邊Tab是請求數據,右邊是響應數據。

關於Http協議的報文結構,下面這張圖做了詳細描述(圖中非范例請求數據),更多內容請見:https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

在了解Http協議報文之后,我們下面開始講解如何使用注入器修改數據。
1. URL參數修改
我們希望將請求參數city的值由北京修改為南京。
https://www.apiopen.top/weatherApi?city=南京
復制代碼
只需要點擊”city=北京“這個參數區域。

打開URL參數編輯頁后,將參數值由北京改為南京,並保存。

修改完成后,返回注入器頁面。city前面的點顏色由灰色變為綠色,表示參數是修改狀態。即如果后續相同請求參數中包含city參數,其值會被強制替換成南京。

點擊右上角完成注入器的創建。
下面我們重新用AppTest應用發送一條相同的請求,來測試修改是否能生效。抓到包后,打開抓包內容詳情:

由於南京是中文,作為URL一部分會被Encode,不怕,我們點擊這個URL打開URL預覽頁:

我們最后再來看看響應數據,確認下是否是真的生效了。

完美!
2. URL參數添加和刪除
如果我們希望將請求修改為這種:
https://www.apiopen.top/weatherApi?province=江蘇&days=7
復制代碼
即刪除city參數,新增province和days參數。
同樣先按照上一步的步驟打開靜態注入器編輯頁面。點擊city參數右側的三個點按鈕,打開功能選擇彈框,一共有三個選項:跟隨,自定義,禁用。

這里解釋下三個選項的含義。
- 跟隨,表示使用原始數據,不做任何修改(默認選項),顏色為灰色。
- 自定義,表示強行覆蓋或添加設定的參數值,顏色為綠色。
- 禁用,表示強行刪除此參數和值,顏色為紅色。
所以,刪除city參數,我們選擇禁用選項,注意參數前面的點變成了紅色。
下一步,點擊新增按鈕添加兩個參數,province=江蘇和days=7。

點擊右上角保存,完成注入器創建后,我們重新再發一條請求,看看效果。

很明顯,city參數沒有了,多了province和days兩個參數。
完美!
3. Headers修改、添加和刪除
同上面URL操作相同,參考1和2,不再贅述。
4. 響應行(Status Line)修改
Http協議中響應行用來表示請求服務的結果狀態,比如常用的200表示成功,404表示資源未找到,500表示服務器異常等等。
有的時候為了測試一些極端情況,比如服務器不返回200而是404,App狀態是否會出現bug等。我們可以使用HttpCanary來強行修改響應行中的狀態碼來實現這種效果。

點擊編輯按鈕,打開列表,其中列出來幾乎所有常用的響應行(都是標准響應行),我們從列表中選擇404 Not Found。

選擇后自動返回,如果想撤銷操作,點擊右邊復位按鈕。

我們點擊右上角保存按鈕完成注入器的創建,重新用AppTest應用發送一條相同請求。從下圖中能看出,后面接收到的請求已經是404 Not Found了。

完美!
5. 請求/響應體(Body)修改
在App實際開發和測試中,修改請求數據和返回數據是最經常用到的。比如,測試地理位置相關接口時,需要修改經緯度;再比如,服務器返回了某些時間戳,我們希望將其延長或者縮短。
同樣以此天氣接口為例,希望將響應體中的yesterday的high改為100℃,low改為-100℃,type改為冰雹

打開創建靜態注入器的頁面后,拉到最下面。點擊右側向上的箭頭,選擇編輯方式。

靜態注入器提供了兩種方式用來編輯Body:上傳文件和直接編輯。如果Body是二進制格式數據(比如音頻、視頻、ProtoBuffer等),HttpCanary內置的文本編輯器是無法處理的,只能使用上傳文件的方式。如果Body是json、xml、fromdata等文本格式,可以使用直接編輯。
由於接口返回的天氣數據是JSON格式,我們可以使用直接編輯選項,打開后直接進行數據修改。

保存后完成靜態注入器的創建,用AppTest應用再發送一條相同請求,來看看結果。

修改成功!完美!
5. 靜態注入器管理
靜態注入器和我們常用的斷點(BreakPoint)方式修改數據不同,它是通過預設的方式來攔截和修改數據,可以極大地提高數據修改的效率。
HttpCanary可以對一個請求配置多個靜態注入器,按照先配置先生效的原則進行攔截處理。靜態注入器一旦創建了,將會以Mod的形式作為插件功能存在於HttpCanary中,即使是殺掉HttpCanar APP后再重啟也能生效。
那我們如何對注入器進行管理呢?打開設置->模組管理頁面,能看到所有創建的靜態注入器。

點擊進入詳情后,能看到注入器是屬於哪個請求的。

如果需要刪除或者禁用已經創建的靜態注入器,只需要在列表頁長按打開功能選項即可!

結語
如果您對HttpCanary有任何疑問或者建議,可以訪問HttpCanary Github並創建issue!
靜態注入器的使用指南到此結束,感謝您的閱讀!
作者:MegatronKing
鏈接:https://juejin.im/post/5c795b6d51882523f026826b
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。