使用Charles代理進行請求轉發

  • 2019 年 10 月 7 日
  • 筆記

Charles是一款代理工具,官網中的解釋為「HTTP代理/HTTP監視器/反向代理」,在Mac OS中使用比較多,當然也支援Windows的用戶,我們可以通過這個代理來查看客戶端與伺服器之間的交互資訊,也可以通過它來修改這些請求或響應當中的資訊,從而來驗證一些產品功能邏輯。

今天我們主要來了解一些Charles當中修改報文的方法。進入主題之前,有兩點需要說明的,第一就是什麼是報文。其實報文就是我們所說的消息(message),只是這些消息在網路當中傳輸需要按照固定的資訊格式。第二點,就是修改什麼。因為我們提到了多種修改的方法,在判斷使用哪種方法之前,如果我們已經清楚修改什麼,就有可能選擇出更高效的方法。

1. Breakpoint(打斷點)

比較適合用於單次的修改。通過打斷點的方式,在請求(Request)到達服務端前和響應(Response)到達客戶端前分別可以實現一次攔截,這樣我們可以通過修改Request來「欺騙」服務端,修改Response來「欺騙」客戶端。

如上圖所示,這中間的資訊我們都是可以進行修改的,比如把請求方式由GET改為POST,改完後點擊Execute即可繼續進行下一步。

如上圖所示,響應中的http狀態碼、報文數據等也可以在攔截之後進行修改。打斷點是每次都要修改的,如果你想要「一勞永逸」,就需要採用下面的方法了。

2. Rewrite

比較適合用於修改報文中的url、固定欄位、字元串等,打開Charles工具欄的Tools,找到Rewrite點擊進入設置。

1) 修改url:比如說請求url發生了變化,需要將www.test.com修改為www.test2.com。

2) 修改返回的http狀態碼:比如某條請求在返回時,客戶端根據請求的狀態碼做了判斷,當請求成功(200)時,就實現邏輯一,請求不成功了就實現邏輯二,這時我們可以通過把請求的狀態碼修改為200,來驗證第一條邏輯,也可以把狀態碼改成404,來驗證第二條邏輯。

如上圖所示,我們一定要在設置的時候勾選上Regex,表示我們使用了正則,這樣d{3}就代表3個並列的整數,也就等同於http的狀態碼了。

3) 修改響應中的字元:比如有些測試環境當中不支援https的鏈接,有些圖片鏈接是https開頭時,會顯示為灰圖,那麼我們可以把返回的報文中https修改為http。

3. Map(重定向)

1) Map Remote

比較適合用於做單純的域名轉發,比如上文中通過Rewrite修改url,這種問題也可以用Map Remote來解決。

如上圖所示,我們的一次Map Remote,實現了下面四項修改:

修改項

修改前

修改後

Protocol

http

https

Host

www.test.com

www.test2.com

Path

/a/b/c

/a/b/c/d

Query

page=0

page=1

2) Map Local

如果你只需要對返回報文的Body進行修改,而且修改之後的內容固定為某一批數據就可以,那麼這個功能就可以幫到你,因為我們可以把請求轉發到本地文件。