天天看點

使用Charles代理進行請求轉發

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

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

1. Breakpoint(打斷點)

比較适合用于單次的修改。通過打斷點的方式,在請求(Request)到達服務端前和響應(Response)到達用戶端前分别可以實作一次攔截,這樣我們可以通過修改Request來“欺騙”服務端,修改Response來“欺騙”用戶端。

使用Charles代理進行請求轉發

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

使用Charles代理進行請求轉發

如上圖所示,響應中的http狀态碼、封包資料等也可以在攔截之後進行修改。打斷點是每次都要修改的,如果你想要“一勞永逸”,就需要采用下面的方法了。

2. Rewrite

比較适合用于修改封包中的url、固定字段、字元串等,打開Charles工具欄的Tools,找到Rewrite點選進入設定。

使用Charles代理進行請求轉發

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

使用Charles代理進行請求轉發
使用Charles代理進行請求轉發

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

使用Charles代理進行請求轉發
使用Charles代理進行請求轉發

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

3) 修改響應中的字元:比如有些測試環境當中不支援https的連結,有些圖檔連結是https開頭時,會顯示為灰圖,那麼我們可以把傳回的封包中https修改為http。

使用Charles代理進行請求轉發
使用Charles代理進行請求轉發

3. Map(重定向)

1) Map Remote

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

使用Charles代理進行請求轉發

如上圖所示,我們的一次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進行修改,而且修改之後的内容固定為某一批資料就可以,那麼這個功能就可以幫到你,因為我們可以把請求轉發到本地檔案。