1、簡介
通過將自己設置為系統(tǒng)的網(wǎng)絡訪問代理服務器,使得所有的網(wǎng)絡訪問都通過他來完成,從而實現(xiàn)了網(wǎng)絡封包的截取和分析。除了在做移動開發(fā)中調(diào)試端口外,Charles 也可以用于分析第三方應用的通訊協(xié)議。配合 Charles 的 SSL 功能,Charles 還可以分析 Https 協(xié)議。
Charles的功能:
????①截取Http 和 Https網(wǎng)絡封包。
????②支持重發(fā)網(wǎng)絡請求,方便后端調(diào)試。
????③支持修改網(wǎng)絡請求參數(shù)。
????④支持網(wǎng)絡請求的截獲并動態(tài)修改。
????⑤支持模擬慢速網(wǎng)絡。
2、如何安裝 Charles
百度云4.2版本
MAC破解:將Charles.app 拖到 應用程序 文件夾;復制charles.jar 到 /Applications/Charles.app/Contents/Java/
windows破解:msi程序安裝后,charles.jar替換到Charles/lib目錄下
3、將 Charles 設置成系統(tǒng)代理
這個是你抓包的前提,設置方法:Proxy---->Windows Proxy? 點擊勾選上即可
需要注意的是,Chrome和Firfox瀏覽器默認不使用系統(tǒng)代理,帶來的問題是,你通過Chrome和Firfox瀏覽器發(fā)出去的請求,無法被Charles截取。解決辦法,手動設置Chrome和Firfox的代理服務器為系統(tǒng)的代理服務器,或者直接將代理服務器地址設成127.0.0.1:8888。
為什么是8888?可不可以更改?全在Proxy---->Proxy Settings進行設置。

4、Charles 主界面介紹
Charles提供兩種查看封包的視圖:Structure和Sequence。
4.1 Structure ——將網(wǎng)絡請求按照域名進行分類
對于某一個具體的網(wǎng)絡請求,你可以查看其詳細的請求內(nèi)容和響應內(nèi)容。如果請求內(nèi)容是 POST 的表單,Charles 會自動幫你將表單進行分項顯示。如果響應內(nèi)容是 JSON 格式的,那么 Charles 可以自動幫你將 JSON 內(nèi)容格式化,方便你查看。如果響應內(nèi)容是圖片,那么 Charles 可以顯示出圖片的預覽。

4.2 Sequence——將網(wǎng)絡請求按照時間進行排序
提供簡單的Filter功能
5、過濾網(wǎng)絡請求
三種方法:一種是Filter內(nèi)填寫需要過濾出來的關(guān)鍵字;另一種方法是Proxy---->Recording Settings ---->Include----->Add,填寫具體內(nèi)容進行過濾。

6、截取 iPhone 上的網(wǎng)絡封包
Charles 通常用來截取本地上的網(wǎng)絡封包,但是當我們需要時,我們也可以用來截取其它設備上的網(wǎng)絡請求。下面我就以 iPhone 為例,講解如何進行相應操作。
????①Charles上的設置:
打開Charles的代理功能,具體操作? Proxy--->Proxy Settings? ,填寫端口默認就好,勾選Enable transparent HTTP proxying,完成Charles的代理功能。
????②iPhone上的設置:
首先我們需要獲取 Charles 運行所在電腦的 IP 地址,Charles 的頂部菜單的 “Help”–>“Local IP Address”,即可在彈出的對話框中看到 IP 地址,如下圖所示:

????然后,設置iPhone的代理服務器,手機和Charles需要連接同一個無線,在手機上填寫Charles的IP地址和端口。
????設置好之后,打開需要聯(lián)網(wǎng)的程序,Charles就會彈出一個窗口,iPhone 請求連接Charles的確認菜單,點擊Allow就好。
7、截取 Https 通訊信息
????①截取電腦端的Https信息:
安裝證書:?“Help” –> “SSL Proxying” –> “Install Charles Root Certificate”。根據(jù)提示,一路點擊下一步,最后提示“導入成功”。windows中win+R輸入命令certmgr.msc,可以在中級證書頒發(fā)機構(gòu)中--->證書查看安裝的證書。
此時證書是不信任的,也就是會出現(xiàn)你用IE或者Chrome打開百度都會提示這不是一個私密連接或者證書不被信任,還需要一步把不信任變成信任。打開IE瀏覽器—>工具—>Internet選項—>內(nèi)容—>證書—>把中級證書頒發(fā)機構(gòu)中的charles證書導出來—>再把導出來的證書導入到受信任的根證書頒發(fā)機構(gòu)中。就是先從中級證書頒發(fā)機構(gòu)中找到你剛才安裝的證書,將其導出(默認選擇就好)再導入到受信任的根證書頒發(fā)機構(gòu)中。當然這個導出導入也可以通過win+R輸入命令certmgr.msc中完成。

還有一步,如果還不能獲取https內(nèi)容,那么右擊--->選擇SSL Proxying Enable。
????②截取手機端的Https信息:
安裝證書:如果我們需要在 iOS 或 Android 機器上截取 Https 協(xié)議的通訊內(nèi)容,還需要在手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 彈出的簡單的安裝教程。如下圖所示:

按照我們之前說的教程,在設備上設置好 Charles 為代理后,在手機瀏覽器中訪問地址:chls.pro/ssl,即可打開證書安裝的界面,安裝完證書后,就可以截取手機上的 Https 通訊內(nèi)容了。不過同樣需要注意,默認情況下 Charles 并不做截取,你還需要在要截取的網(wǎng)絡請求上右擊,選擇 SSL proxy 菜單項。
8、模擬慢速網(wǎng)絡
在 Charles 的菜單上,選擇 “Proxy”–>“Throttle Setting” 項,在之后彈出的對話框中,我們可以勾選上 “Enable Throttling”,并且可以設置 Throttle Preset 的類型。
9、修改網(wǎng)絡請求內(nèi)容
有些時候為了調(diào)試服務器的接口,我們需要反復嘗試不同參數(shù)的網(wǎng)絡請求。Charles 可以方便地提供網(wǎng)絡請求的修改和重發(fā)功能。只需要在以往的網(wǎng)絡請求上點擊右鍵,選擇 “Edit”,即可創(chuàng)建一個可編輯的網(wǎng)絡請求。
10、給服務器做壓力測試
我們可以使用 Charles 的 Repeat 功能來簡單地測試服務器的并發(fā)處理能力,方法如下:我們在想打壓的網(wǎng)絡請求上(POST 或 GET 請求均可)右擊,然后選擇 「Repeat Advanced」菜單項,接著我們就可以在彈出的對話框中,選擇打壓的并發(fā)線程數(shù)以及打壓次數(shù),確定之后,即可開始打壓。
11、修改服務器返回內(nèi)容
有些時候我們想讓服務器返回一些指定的內(nèi)容,方便我們調(diào)試一些特殊情況。例如列表頁面為空的情況,數(shù)據(jù)異常的情況,部分耗時的網(wǎng)絡請求超時的情況等。如果沒有 Charles,要服務器配合構(gòu)造相應的數(shù)據(jù)顯得會比較麻煩。這個時候,使用 Charles 相關(guān)的功能就可以滿足我們的需求。根據(jù)具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改服務器返回內(nèi)容的目的。
三者在功能上的差異:
Map 功能適合長期地將某一些請求重定向到另一個網(wǎng)絡地址或本地文件。
Rewrite 功能適合對網(wǎng)絡請求進行一些正則替換。
Breakpoints 功能適合做一些臨時性的修改。
Map功能:
Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,顧名思義,Map Remote 是將指定的網(wǎng)絡請求重定向到另一個網(wǎng)址請求地址,Map Local 是將指定的網(wǎng)絡請求重定向到本地文件。
Rewrite功能:
Rewrite 功能功能適合對某一類網(wǎng)絡請求進行一些正則替換,以達到修改結(jié)果的目的。
Breakpoints功能:
Breakpoints 功能類似我們在 Xcode 中設置的斷點一樣,當指定的網(wǎng)絡請求發(fā)生時,Charles 會截獲該請求,這個時候,我們可以在 Charles 中臨時修改網(wǎng)絡請求的返回內(nèi)容。
12、總結(jié)
通過 Charles 軟件,我們可以很方便地在日常開發(fā)中,截取和調(diào)試網(wǎng)絡請求內(nèi)容,分析封包協(xié)議以及模擬慢速網(wǎng)絡。用好 Charles 可以極大的方便我們對于帶有網(wǎng)絡請求的 App 的開發(fā)和調(diào)試。