《爆肝整理》保姆級系列教學-玩轉Charles抓包神器教學(10)-Charles如何修改請求引數和響應資料-下篇

2023-03-08 12:00:42

1.簡介

宏哥之前一直用postman調介面比較多(web端),也非常容易上手和操作。但有時候想要去修改APP的頁面展示,造資料又會比較麻煩,你自己造相對還好些,要是讓開發造,還得低眉順眼的去求人。通過今天的學習後,再也不擔心這些煩心事。我們可以通過工具Charles就可以實現。可以用以下三種方法修改請求引數或修改響應:map(對映)、Breakpoints(打斷點)、Rewrite(重寫)。

2.修改請求引數或者響應資料的方法

根據具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改伺服器返回內容的目的。這三者在功能上的差異是:

Map 功能適合長期地將某一些請求重定向到另一個網路地址或本地檔案。只能修改返回資料。
Rewrite 功能適合對網路請求進行一些正則替換。可修改請求資料和響應資料。
Breakpoints 功能適合做一些臨時性的修改。在響應時間內,可修改請求資料和響應資料。

2.1MAP(對映)

Charles 的map功能,就是將某個請求進行重定向,然後用重定向後的內容來修改請求內容;map又分Map Remote和Map Local,顧名思義:Map Remote 是將指定的網路請求重定向到另一個網址,Map Local 是將指定的網路請求重定向到本地檔案

2.2Rewrite(重寫)

Rewrite 功能功能適合對某一類網路請求進行一些正則替換,以達到修改結果的目的。

2.3Breakpoint(打斷點)

上面提供的 Rewrite 功能最適合做批次和長期的替換,但是很多時候,我們只是想臨時修改一次網路請求結果,這個時候,使用 Rewrite 功能雖然也可以達到目的,但是過於麻煩,對於臨時性的修改,我們最好使用 Breakpoints 功能。

Breakpoints 功能類似我們在 Xcode 中設定的斷點一樣,當指定的網路請求發生時,Charles 會截獲該請求,這個時候,我們可以在 Charles 中臨時修改網路請求的返回內容。

3.修改響應內容

有些時候我們想讓伺服器返回一些指定的內容,方便我們偵錯一些特殊情況。例如列表頁面為空的情況,資料異常的情況,部分耗時的網路請求超時的情況等。如果沒有Charles,要伺服器配合構造相應的資料顯得會比較麻煩。這個時候,使用 Charles 相關的功能就可以滿足我們的需求。

3.1Map Local

Map Local的使用場景,要驗證介面返回資料的各種場景,使用本地對映可以修改請求介面的response。對於 Map Local 功能,我們需要填寫的重定向的源地址和原生的目標檔案。對於有一些複雜的網路請求結果,我們可以先使用 Charles 提供的 「Save Response…」 功能,將請求結果儲存到本地(如下圖所示),然後稍加修改,成為我們的目標對映檔案。具體操作步驟如下:

1.儲存介面響應:右鍵-->save response-->儲存到本地路徑(最好為json格式)備用,這裡還是用自己寫的API。如下圖所示:

2.在 Charles 的選單中,選擇 「Tools」–> 「Map Local」 即可進入到相應功能的設定頁面。如下圖所示:

這種操作稍微有點複雜。或者你可以點選介面-->右鍵-->Map Local進入Map Edit頁面,如下圖所示:

3.在Map Local設定頁面,勾選「Enable Map Local」,點選「Add」,然後進行設定,設定Map Local path 選擇你儲存到本地已修改的json檔案(我把張三修改成了北京-宏哥)。如下圖所示:

4.瀏覽器存取或者其他介面工具重新傳送請求,預期結果返回北京-宏哥與實際結果一樣,如下圖所示:

3.2Map Remote

Map Remote的使用場景,要驗證介面返回資料的各種場景,使用本地對映可以修改請求介面的response。對於 Map Remote 功能,我們需要分別填寫網路重定向的源地址和目的地址,對於不需要限制的條件,可以留空。具體操作步驟如下:

1.在 Charles 的選單中,選擇 「Tools」–> 「Map Remote」 即可進入到相應功能的設定頁面。如下圖所示:

這種操作稍微有點複雜。或者你可以點選介面-->右鍵-->Map Remote進入Map Edit頁面,如下圖所示:

2.在Map Remote設定頁面,勾選「Enable Map Remote」,點選「Add」,然後進行設定,設定Map From(介面地址:http://10.11.53.193:5566/users/1801)和Map To(對映地址:http://10.11.53.193:5566/users/1803),宏哥將其對映到百度 。如下圖所示:

3.傳送預期結果返回王五實際結果一樣,如下圖所示:

 

3.3Rewrite(重寫)

Rewrite 功能功能適合對某一類網路請求進行一些正則替換,以達到修改結果的目的。

1.例如,還是用之前API 請求是獲得使用者賬戶資訊,而我當前的賬戶是 「張三」返回賬戶資訊是成功:success,如下圖所示:

2.我們想試著直接修改網路返回值,將 success 換成 fail。於是我們啟用 Rewrite 功能,然後設定如下的規則:

3.勾選「Enable Rewrite」,點選「Add」,然後設定規則,如下圖所示:

4.瀏覽器存取或者其他介面工具重新傳送請求,預期結果返回fail與實際結果一樣,如下圖所示:

3.4Breakpoint(打斷點)

上面提供的 Rewrite 功能最適合做批次和長期的替換,但是很多時候,我們只是想臨時修改一次網路響應結果,這個時候,使用 Rewrite 功能雖然也可以達到目的,但是過於麻煩,對於臨時性的修改,我們最好使用 Breakpoints 功能。

Breakpoints 功能類似我們在 Xcode 中設定的斷點一樣,當指定的網路請求發生時,Charles 會截獲該請求返回資料,這個時候,我們可以在 Charles 中臨時修改網路請求的返回資料。

打斷點修改返回資料的方法已經在上一篇文章中進行了詳細的介紹,這裡宏哥就不做贅述了。

4.小結