
①.Charles下載
Charles當前基本上都是收費軟件,請大家支持正版軟件!
建議不管是windows還是Mac的小伙伴用Charles吧!
②.將 Charles 設(shè)置成系統(tǒng)代理
Charles 是通過將自己設(shè)置成代理服務(wù)器來完成封包截取的,所以使用 Charles 的第一步是將其設(shè)置成系統(tǒng)的代理服務(wù)器。第一次啟動Charles會請求你給它設(shè)置系統(tǒng)代理的權(quán)限。你可以輸入登錄密碼授予 Charles 該權(quán)限。你也可以忽略該請求,然后在需要將 Charles 設(shè)置成系統(tǒng)代理時,選擇菜單中的 “Proxy” -> “Mac OS X Proxy” 來將 Charles 設(shè)置成系統(tǒng)代理。

③.過濾網(wǎng)絡(luò)請求
通常情況下在抓包的時候,你可能只想關(guān)注一部分指定的域名所發(fā)送的網(wǎng)絡(luò)請求,但是其他的請求總是那么多,那么下面就介紹兩種方法來實現(xiàn)!
方法一:通過設(shè)置Recording Settings
Charles菜單選擇“Proxy”->”Recording Settings” 選擇Include 標簽然后選擇添加一個項目,然后填入需要監(jiān)控的協(xié)議,主機地址,端口號。
1、Protocol:不選擇則不區(qū)分http和https
2、Host:可以設(shè)置泛域名,如 *.baidu.com
3、Port:可以不設(shè)置
4、Path:根據(jù)需求在需要只監(jiān)控部分接口時使用
5、Query:根據(jù)需求在需要只監(jiān)控部分接口時使用

方法二:右鍵菜單Focus
這個方法比較簡單快捷,在一些臨時情況下可以很快進行過濾,比較方便,方法則是:在想過濾的網(wǎng)絡(luò)請求上右擊,選擇 “Focus”

有很多小伙伴在Focus之后就忘記了哪些Focus過,以至于Charles顯示出來的過濾的請求比較雜!在菜單 “View->FocusedHosts...”中進行管理Focus過的域名

④.手機端/App抓包
在我之前的簡書文章里有詳細的設(shè)置方法和注意事項![點擊穿越]
⑤.模擬網(wǎng)絡(luò)
不管是在做app開發(fā)還是app測試的時候,模擬慢速網(wǎng)絡(luò)或者高延遲的網(wǎng)絡(luò)看應(yīng)用的表現(xiàn)是否正常都是必要的,可以通過以下設(shè)置進行操作:“Proxy”->”Throttle Setting”勾選上 “Enable Throttling”,并且可以設(shè)置 Throttle Preset 的類型。

如果我們只想模擬指定網(wǎng)站的慢速網(wǎng)絡(luò),可以再勾選上圖中的 “Only for selected hosts” 項,然后在對話框的下半部分設(shè)置中增加指定的 hosts 項即可。

⑥.編輯網(wǎng)絡(luò)請求
有時候在調(diào)試或者測試的時候需要反復(fù)不斷的嘗試不同的參數(shù)來調(diào)用接口,Charles 可以方便地提供網(wǎng)絡(luò)請求的修改和重發(fā)功能,只需要編輯一下,進行修改之后執(zhí)行即可,如下Gif演示

⑦.修改服務(wù)器返回內(nèi)容
常常有時候需要模擬一些數(shù)據(jù)異常的情況,通過Charles對返回值進行修改,那么在進行測試的時候必然會事半功倍,不會受到后端程序和數(shù)據(jù)的禁錮!Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改服務(wù)器返回內(nèi)容的目的。
1、Map 功能適合長期地將某一些請求重定向到另一個網(wǎng)絡(luò)地址或本地文件。
2、Rewrite 功能適合對網(wǎng)絡(luò)請求進行一些正則替換。
3、Breakpoints 功能適合做一些臨時性的修改。
1、Map
Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,Map Remote 是將指定的網(wǎng)絡(luò)請求重定向到另一個網(wǎng)址請求地址,Map Local 是將指定的網(wǎng)絡(luò)請求重定向到本地文件

我可以通過Map Remote將測試環(huán)境的域名重定向到線上域名:

對于Map Local,通俗來講可以將一個接口的返回值通過Charles指向一個本地文件,本地文件中可以變成任何你想讓接口返回的數(shù)據(jù)。比如本地當前保存過一個response文件(返回值文件,可以通過右鍵"save response"進行保存)

Map Local 在使用的時候,有一個潛在的問題,如果客戶端校驗了 Http Response Header 中的部分內(nèi)容,就會使得該功能失效。解決辦法是下面提到的 Rewrite 功能
2、Rewrite
Rewrite功能十分強大,在用的時候簡直是事半功倍,打個比方:App已經(jīng)做好了,但是接口這時候增加了一個參數(shù),但是App本身是沒問題的,App的人已經(jīng)下班了,需要你驗證一下這個接口發(fā)上去會不會影響到App,這時候就可以用rewrite了,通過重寫接口請求,后把數(shù)據(jù)給App來查看app情況再合適不過了。好用到不能在好用。
舉個栗子:
當前接口返回了一個分類叫“潮品”,這時候我想改成別的,比如“優(yōu)雅的豬”。
1、首先進入rewrite菜單“Tools->Rewrite”

2、首先要打開rewrite功能,勾選"enable rewrite"你會看到左邊的菜單下面有個“ad
d”,點擊添加一條rewrite規(guī)則

3、設(shè)置location,做事得有個目標不是?所以要告訴Charles你要修改誰

4、設(shè)置修改規(guī)則,Charles提供了多種類型的修改規(guī)則
Add Header:請求中增加請求頭
Modify Header:修改請求頭
Remove Header:刪除請求頭
Host:修改指向
Path:修改路徑
URL:修改請求地址
Add Query Param:增加請求參數(shù)(GET接口)
Modify Query Param:修改請求參數(shù)(GET接口)
Remove Query Param:刪除請求參數(shù)(GET接口)
Response Status:修改返回值的HTTP狀態(tài)值,如:404
Body:修改返回值的詳細內(nèi)容(POST接口)

設(shè)置好之后,可以replay一下請求,也可以用調(diào)用接口的app再試一下

Rewrite中所提供的這些類型不做一一演示,好好體會!有問題可以找我~
3、Breakpoints
Breakpoints 功能類似我們在設(shè)置的斷點一樣,以下一張Gif能說明,如果看不懂,那就多看幾遍、

需要注意的是,使用 Breakpoints 功能將網(wǎng)絡(luò)請求截獲并修改過程中,整個網(wǎng)絡(luò)請求的計時并不會暫停,所以長時間的暫??赡軐?dǎo)致客戶端的請求超時。
碼字好累。。。
