【Charles】Charles使用教程

一、charles簡介

Charles是在 Mac 下常用的網(wǎng)絡(luò)封包截取工具,在做 移動開發(fā)時,我們?yōu)榱苏{(diào)試與服務(wù)器端的網(wǎng)絡(luò)通訊協(xié)議,常常需要截取網(wǎng)絡(luò)封包來分析。

Charles 通過將自己設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問代理服務(wù)器,使得所有的網(wǎng)絡(luò)訪問請求都通過它來完成,從而實現(xiàn)了網(wǎng)絡(luò)封包的截取和分析。

除了在做移動開發(fā)中調(diào)試端口外,Charles 也可以用于分析第三方應(yīng)用的通訊協(xié)議。配合 Charles 的 SSL 功能,Charles 還可以分析 Https 協(xié)議。

二、系統(tǒng)代理

Charles 是通過將自己設(shè)置成代理服務(wù)器來完成封包截取的,所以使用 Charles 的第一步是將其設(shè)置成系統(tǒng)的代理服務(wù)器。

啟動 Charles 后,第一次 Charles 會請求你給它設(shè)置系統(tǒng)代理的權(quán)限。你可以輸入登錄密碼授予 Charles 該權(quán)限。你也可以忽略該請求,然后在需要將 Charles 設(shè)置成系統(tǒng)代理時,選擇菜單中的 “Proxy” –> “Mac OS X Proxy” 來將 Charles 設(shè)置成系統(tǒng)代理。如下所示:


image

之后,你就可以看到源源不斷的網(wǎng)絡(luò)請求出現(xiàn)在 Charles 的界面中

如果需要https請求也進(jìn)行抓包讀取則需要以下配置
1、打開Charles,選擇Help->SSL Proxy→Install Charles Root Certificate

2、在彈出的添加證書窗口中,選擇添加,可以看到在鑰匙串訪問窗口中,該證書已成功添加,但是此時該證書仍然不被信任


3、雙擊此證書,在彈出的Charles Proxy CA窗口中,點擊信任按鈕,使用此證書時,選擇始終信任后關(guān)閉窗口,使用賬號和密碼授權(quán)后,即可看到此證書已經(jīng)被信任了


4、需要注意的是,即使是安裝完證書之后,Charles 默認(rèn)也并不截取 Https 網(wǎng)絡(luò)通訊的信息,如果你想對截取某個網(wǎng)站上的所有 Https 網(wǎng)絡(luò)請求,可以在該請求上右擊,選擇 SSL proxy,如下圖所示


image

三、過濾網(wǎng)絡(luò)請求

通常情況下,我們需要對網(wǎng)絡(luò)請求進(jìn)行過濾,只監(jiān)控向指定目錄服務(wù)器上發(fā)送的請求。對于這種需求,以下幾種辦法:

方法一:在主界面的中部的 Filter 欄中填入需要過濾出來的關(guān)鍵字。例如我們的服務(wù)器的地址是:http://www.baidu , 那么只需要在 Filter 欄中填入 baidu 即可。

image.png

方法二:在 Charles 的菜單欄選擇 “Proxy”–>“Recording Settings”,然后選擇 Include 欄,選擇添加一個項目,然后填入需要監(jiān)控的協(xié)議,主機地址,端口號。這樣就可以只截取目標(biāo)網(wǎng)站的封包了。如下圖所示:


image

四、截取手機上的網(wǎng)絡(luò)封包

Charles 通常用來截取本地上的網(wǎng)絡(luò)封包,但是當(dāng)我們需要時,我們也可以用來截取其它設(shè)備上的網(wǎng)絡(luò)請求。下面我就以 iPhone 為例,講解如何進(jìn)行相應(yīng)操作。

Charles 上的設(shè)置

要截取 iPhone 上的網(wǎng)絡(luò)請求,我們首先需要將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy”–>“Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的設(shè)置。如下圖所示:


image

iPhone 上的設(shè)置

首先我們需要獲取 Charles 運行所在電腦的 IP 地址,Charles 的頂部菜單的 “Help”–>“Local IP Address”,即可在彈出的對話框中看到 IP 地址,如下圖所示:


image

在 iPhone 的 “ 設(shè)置 ”–>“ 無線局域網(wǎng) ” 中,可以看到當(dāng)前連接的 wifi 名,通過點擊右邊的詳情鍵,可以看到當(dāng)前連接上的 wifi 的詳細(xì)信息,包括 IP 地址,子網(wǎng)掩碼等信息。在其最底部有「HTTP 代理」一項,我們將其切換成手動,然后填上 Charles 運行所在的電腦的 IP,以及端口號 8888,如下圖所示


image

設(shè)置好之后,我們打開 iPhone 上的任意需要網(wǎng)絡(luò)通訊的程序,就可以看到 Charles 彈出 iPhone 請求連接的確認(rèn)菜單(如下圖所示),點擊 “Allow” 即可完成設(shè)置。
image

五、截取移動設(shè)備中的 Https 通訊信息

如果我們需要在 iOSAndroid 機器上截取 Https 協(xié)議的通訊內(nèi)容,還需要在手機上安裝相應(yīng)的證書。點擊 Charles 的頂部菜單,選擇 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 彈出的簡單的安裝教程。如下圖所示:

image

按照我們之前說的教程,在設(shè)備上設(shè)置好 Charles 為代理后,在手機瀏覽器中訪問地址:http://charlesproxy.com/getssl,即可打開證書安裝的界面,安裝完證書后,就可以截取手機上的 Https 通訊內(nèi)容了。不過同樣需要注意,默認(rèn)情況下 Charles 并不做截取,你還需要在要截取的網(wǎng)絡(luò)請求上右擊,選擇 SSL proxy 菜單項

六、模擬慢速網(wǎng)絡(luò)

在做移動開發(fā)的時候,我們常常需要模擬慢速網(wǎng)絡(luò)或者高延遲的網(wǎng)絡(luò),以測試在移動網(wǎng)絡(luò)下,應(yīng)用的表現(xiàn)是否正常。Charles 對此需求提供了很好的支持。

在 Charles 的菜單上,選擇 “Proxy”–>“Throttle Setting” 項,在之后彈出的對話框中,我們可以勾選上 “Enable Throttling”,并且可以設(shè)置 Throttle Preset 的類型。如下圖所示:


image

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

七、修改網(wǎng)絡(luò)請求內(nèi)容

有些時候為了調(diào)試服務(wù)器的接口,我們需要反復(fù)嘗試不同參數(shù)的網(wǎng)絡(luò)請求。Charles 可以方便地提供網(wǎng)絡(luò)請求的修改和重發(fā)功能。只需要在以往的網(wǎng)絡(luò)請求上點擊右鍵,選擇 “Edit”,即可創(chuàng)建一個可編輯的網(wǎng)絡(luò)請求。如下所示:


image

我們可以修改該請求的任何信息,包括 URL 地址、端口、參數(shù)等,之后點擊 “Execute” 即可發(fā)送該修改后的網(wǎng)絡(luò)請求(如下圖所示)。Charles 支持我們多次修改和發(fā)送該請求,這對于我們和服務(wù)器端調(diào)試接口非常方便,如下圖所示


image

八、壓力測試

我們可以使用 Charles 的 Repeat 功能來簡單地測試服務(wù)器的并發(fā)處理能力,方法如下。

我們在想打壓的網(wǎng)絡(luò)請求上(POST 或 GET 請求均可)右擊,然后選擇 「Repeat Advanced」菜單項,如下所示:


image

接著我們就可以在彈出的對話框中,選擇打壓的并發(fā)線程數(shù)以及打壓次數(shù),確定之后,即可開始打壓


image

九、修改服務(wù)器返回內(nèi)容

有些時候我們想讓服務(wù)器返回一些指定的內(nèi)容,方便我們調(diào)試一些特殊情況。例如列表頁面為空的情況,數(shù)據(jù)異常的情況,部分耗時的網(wǎng)絡(luò)請求超時的情況等。如果沒有 Charles,要服務(wù)器配合構(gòu)造相應(yīng)的數(shù)據(jù)顯得會比較麻煩。這個時候,使用 Charles 相關(guān)的功能就可以滿足我們的需求。

根據(jù)具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達(dá)到修改服務(wù)器返回內(nèi)容的目的。這三者在功能上的差異是:

Map 功能

Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,顧名思義,Map Remote 是將指定的網(wǎng)絡(luò)請求重定向到另一個網(wǎng)址請求地址,Map Local 是將指定的網(wǎng)絡(luò)請求重定向到本地文件。

在 Charles 的菜單中,選擇 “Tools”–>“Map Remote” 或 “Map Local” 即可進(jìn)入到相應(yīng)功能的設(shè)置頁面

image

對于 Map Remote 功能,我們需要分別填寫網(wǎng)絡(luò)重定向的源地址和目的地址,對于不需要限制的條件,可以留空。下圖是一個示例,我將所有 ytk1.yuanku.ws(測試服務(wù)器)的請求重定向到了 www.yuantiku.com(線上服務(wù)器)
image

對于 Map Local 功能,我們需要填寫的重定向的源地址和本地的目標(biāo)文件。對于有一些復(fù)雜的網(wǎng)絡(luò)請求結(jié)果,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結(jié)果保存到本地(如下圖所示),然后稍加修改,成為我們的目標(biāo)映射文件


image

十、Rewrite功能

image

image

image

image

注意:本文章參考https://blog.csdn.net/forebe/article/details/98945139

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容