簡介
Charles 是在 Mac 下常用的網(wǎng)絡(luò)封包截取工具
Charles 是收費(fèi)軟件蚂且,可以免費(fèi)試用 30 天。試用期過后,未付費(fèi)的用戶仍然可以繼續(xù)使用,但是每次使用時(shí)間不能超過 30 分鐘扫外,并且啟動時(shí)將會有 10 秒種的延時(shí)
主要功能
- 支持ssl代理
- 截取 Http 和 Https 網(wǎng)絡(luò)封包。
- 支持重發(fā)網(wǎng)絡(luò)請求廓脆,方便后端調(diào)試筛谚。
- 支持修改網(wǎng)絡(luò)請求參數(shù)
- 支持網(wǎng)絡(luò)請求的截獲并動態(tài)修改。
- 支持模擬慢速網(wǎng)絡(luò)停忿。
安裝 Charles
去 Charles 的官方網(wǎng)站http://www.charlesproxy.com下載最新版的 Charles 安裝包驾讲,是一個(gè) dmg 后綴的文件。打開后將 Charles 拖到 Application 目錄下即完成安裝。
Charles 主界面介紹
Charles 主要提供兩種查看封包的視圖吮铭,分別名為 “Structure” 和 “Sequence”时迫。
- Structure 視圖將網(wǎng)絡(luò)請求按訪問的域名分類
- Sequence 視圖將網(wǎng)絡(luò)請求按訪問的時(shí)間排序
Charles 提供了一個(gè)簡單的 Filter 功能,可以輸入關(guān)鍵字來快速篩選出 URL 中帶指定關(guān)鍵字的網(wǎng)絡(luò)請求谓晌。
過濾網(wǎng)絡(luò)請求
通常情況下别垮,我們需要對網(wǎng)絡(luò)請求進(jìn)行過濾,只監(jiān)控向指定目錄服務(wù)器上發(fā)送的請求扎谎。對于這種需求碳想,以下幾種辦法:
- 在主界面的中部的 Filter 欄中填入需要過濾出來的關(guān)鍵字。例如我們的服務(wù)器的地址是:http://yuantiku.com , 那么只需要在 Filter 欄中填入 yuantiku 即可毁靶。
-
方法二:在 Charles 的菜單欄選擇 “Proxy”->”Recording Settings”胧奔,然后選擇 Include 欄,選擇添加一個(gè)項(xiàng)目预吆,然后填入需要監(jiān)控的協(xié)議龙填,主機(jī)地址,端口號拐叉。這樣就可以只截取目標(biāo)網(wǎng)站的封包了岩遗。如下圖所示:
通常情況下,我們使用方法一做一些臨時(shí)性的封包過濾凤瘦,使用方法二做一些經(jīng)常性的封包過濾宿礁。
截取 iPhone 上的網(wǎng)絡(luò)封包
Charles 通常用來截取本地上的網(wǎng)絡(luò)封包,但是當(dāng)我們需要時(shí)蔬芥,我們也可以用來截取其它設(shè)備上的網(wǎng)絡(luò)請求梆靖。下面我就以 iPhone 為例,講解如何進(jìn)行相應(yīng)操作笔诵。
-
要截取 iPhone 上的網(wǎng)絡(luò)請求返吻,我們首先需要將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy”->”Proxy Settings”乎婿,填入代理端口 8888测僵,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的設(shè)置。如下圖所示:
在 iPhone 的 “ 設(shè)置 “->” 無線局域網(wǎng) “ 中谢翎,可以看到當(dāng)前連接的 wifi 名捍靠,通過點(diǎn)擊右邊的詳情鍵,可以看到當(dāng)前連接上的 wifi 的詳細(xì)信息岳服,包括 IP 地址剂公,子網(wǎng)掩碼等信息。在其最底部有「HTTP 代理」一項(xiàng)吊宋,我們將其切換成手動,然后填上 Charles 運(yùn)行所在的電腦的 IP,以及端口號 8888
設(shè)置好之后璃搜,我們打開 iPhone 上的任意需要網(wǎng)絡(luò)通訊的程序拖吼,就可以看到 Charles 彈出 iPhone 請求連接的確認(rèn)菜單(如下圖所示),點(diǎn)擊 “Allow” 即可完成設(shè)置这吻。
截取 Https 通訊信息
安裝證書
首先我們需要在 Mac 電腦上安裝證書吊档。點(diǎn)擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”唾糯,然后輸入系統(tǒng)的帳號密碼怠硼,即可在 KeyChain 看到添加好的證書
需要注意的是,即使是安裝完證書之后移怯,Charles 默認(rèn)也并不截取 Https 網(wǎng)絡(luò)通訊的信息香璃,如果你想對截取某個(gè)網(wǎng)站上的所有 Https 網(wǎng)絡(luò)請求,可以在該請求上右擊舟误,選擇 SSL proxy
截取移動設(shè)備中的 Https 通訊信息
- 如果我們需要在 iOS 或 Android 機(jī)器上截取 Https 協(xié)議的通訊內(nèi)容葡秒,還需要在手機(jī)上安裝相應(yīng)的證書。點(diǎn)擊 Charles 的頂部菜單嵌溢,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”
按照提示進(jìn)行操作眯牧,安裝完證書后,就可以截取手機(jī)上的 Https 通訊內(nèi)容了
注意
Configure your device to use Charles as its HTTP proxy on 10.233.1.118:8888, then browse to chls.pro/ssl to download and install the certificate.
意思是先設(shè)置代理 然后再去訪問網(wǎng)站 要不沒法下載
模擬慢速網(wǎng)絡(luò)
在做移動開發(fā)的時(shí)候赖草,我們常常需要模擬慢速網(wǎng)絡(luò)或者高延遲的網(wǎng)絡(luò)学少,以測試在移動網(wǎng)絡(luò)下,應(yīng)用的表現(xiàn)是否正常秧骑。Charles 對此需求提供了很好的支持旱易。
在 Charles 的菜單上,選擇 “Proxy”->”Throttle Setting” 項(xiàng)腿堤,在之后彈出的對話框中阀坏,我們可以勾選上 “Enable Throttling”,并且可以設(shè)置 Throttle Preset 的類型
如果我們只想模擬指定網(wǎng)站的慢速網(wǎng)絡(luò)笆檀,可以再勾選上圖中的 “Only for selected hosts” 項(xiàng)忌堂,然后在對話框的下半部分設(shè)置中增加指定的 hosts 項(xiàng)即可。
修改網(wǎng)絡(luò)請求內(nèi)容
有些時(shí)候?yàn)榱苏{(diào)試服務(wù)器的接口酗洒,我們需要反復(fù)嘗試不同參數(shù)的網(wǎng)絡(luò)請求士修。Charles 可以方便地提供網(wǎng)絡(luò)請求的修改和重發(fā)功能。只需要在以往的網(wǎng)絡(luò)請求上點(diǎn)擊右鍵樱衷,選擇 “compose”棋嘲,即可創(chuàng)建一個(gè)可編輯的網(wǎng)絡(luò)請求
我們可以修改該請求的任何信息,包括 URL 地址矩桂、端口沸移、參數(shù)等,之后點(diǎn)擊 “Execute” 即可發(fā)送該修改后的網(wǎng)絡(luò)請求(如下圖所示)。Charles 支持我們多次修改和發(fā)送該請求雹锣,這對于我們和服務(wù)器端調(diào)試接口非常方便
給服務(wù)器做壓力測試
我們可以使用 Charles 的 Repeat 功能來簡單地測試服務(wù)器的并發(fā)處理能力
我們在想打壓的網(wǎng)絡(luò)請求上(POST 或 GET 請求均可)右擊网沾,然后選擇 「Repeat Advanced」菜單項(xiàng),接著我們就可以在彈出的對話框中,選擇打壓的并發(fā)線程數(shù)以及打壓次數(shù)蕊爵,確定之后辉哥,即可開始打壓
修改服務(wù)器返回內(nèi)容
有些時(shí)候我們想讓服務(wù)器返回一些指定的內(nèi)容,方便我們調(diào)試一些特殊情況攒射。例如列表頁面為空的情況醋旦,數(shù)據(jù)異常的情況,部分耗時(shí)的網(wǎng)絡(luò)請求超時(shí)的情況等会放。如果沒有 Charles饲齐,要服務(wù)器配合構(gòu)造相應(yīng)的數(shù)據(jù)顯得會比較麻煩。這個(gè)時(shí)候鸦概,使用 Charles 相關(guān)的功能就可以滿足我們的需求箩张。
根據(jù)具體的需求,Charles 提供了 Map 功能窗市、 Rewrite 功能以及 Breakpoints 功能先慷,都可以達(dá)到修改服務(wù)器返回內(nèi)容的目的。這三者在功能上的差異是:
- Map 功能適合長期地將某一些請求重定向到另一個(gè)網(wǎng)絡(luò)地址或本地文件咨察。
- Rewrite 功能適合對網(wǎng)絡(luò)請求進(jìn)行一些正則替換
- Breakpoints 功能適合做一些臨時(shí)性的修改论熙。
Map 功能
Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,顧名思義摄狱,Map Remote 是將指定的網(wǎng)絡(luò)請求重定向到另一個(gè)網(wǎng)址請求地址脓诡,Map Local 是將指定的網(wǎng)絡(luò)請求重定向到本地文件。
Rewrite 功能
Rewrite 功能功能適合對某一類網(wǎng)絡(luò)請求進(jìn)行一些正則替換媒役,以達(dá)到修改結(jié)果的目的
Breakpoints 功能
上面提供的 Rewrite 功能最適合做批量和長期的替換祝谚,但是很多時(shí)候,我們只是想臨時(shí)修改一次網(wǎng)絡(luò)請求結(jié)果酣衷,這個(gè)時(shí)候交惯,使用 Rewrite 功能雖然也可以達(dá)到目的,但是過于麻煩穿仪,對于臨時(shí)性的修改席爽,我們最好使用 Breakpoints 功能。
Breakpoints 功能類似我們在 Xcode 中設(shè)置的斷點(diǎn)一樣啊片,當(dāng)指定的網(wǎng)絡(luò)請求發(fā)生時(shí)只锻,Charles 會截獲該請求,這個(gè)時(shí)候紫谷,我們可以在 Charles 中臨時(shí)修改網(wǎng)絡(luò)請求的返回內(nèi)容齐饮。
需要注意的是捐寥,使用 Breakpoints 功能將網(wǎng)絡(luò)請求截獲并修改過程中,整個(gè)網(wǎng)絡(luò)請求的計(jì)時(shí)并不會暫停沈矿,所以長時(shí)間的暫蜕险妫可能導(dǎo)致客戶端的請求超時(shí)咬腋。
反向代理
Charles 的反向代理功能允許我們將本地的端口映射到遠(yuǎn)程的另一個(gè)端口上羹膳。例如,在下圖中根竿,我將本機(jī)的 61234 端口映射到了遠(yuǎn)程(www.yuantiku.com)的80端口上了陵像。這樣,當(dāng)我訪問本地的 61234 端口時(shí)寇壳,實(shí)際返回的內(nèi)容會由 www.yuantiku.com 的 80 端口提供醒颖。