一、Charles簡介
1.Charles的功能
Charles 是在 PC 端常用的網(wǎng)絡(luò)封包截取工具,在做移動開發(fā)時,我們?yōu)榱苏{(diào)試與服務(wù)器端的網(wǎng)絡(luò)通訊協(xié)議,常常需要截取網(wǎng)絡(luò)封包來分析。除了在做移動開發(fā)中調(diào)試端口外,Charles 也可以用于分析第三方應(yīng)用的通訊協(xié)議。配合 Charles 的 SSL 功能,Charles還可以分析 Https 協(xié)議。
Charles 通過將自己設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問代理服務(wù)器,使得所有的網(wǎng)絡(luò)訪問請求都通過它來完成,從而實現(xiàn)了網(wǎng)絡(luò)封包的截取和分析。
應(yīng)用場景原理圖:
從直接與云端服務(wù)器通信,變?yōu)橄扰cCharles所在計算機(jī)通信,再由計算機(jī)將信息發(fā)給云端服務(wù)器

2.Charles的界面
總覽

工具欄
其中的“編輯會話”,即Compose功能
“重發(fā)請求”,即Repeat功能

工作區(qū)
會話列表
按“結(jié)構(gòu)”排列:
會話列表按照“域名”、“一級路徑”、“二級路徑”……“N級路徑”的方式,分組整理展示

按“順序”排列:
會話列表按照抓取請求的時間順序排列,不分組
在Filter中輸入匹配文本或正則表達(dá)式(在點擊右側(cè)Settings按鈕打開的“Sequence Settings”對話框開啟“Filter uses regex”<使用正則過濾>后),會話列表將僅展示符合匹配規(guī)則的會話

會話詳情a

總覽
a選定請求或請求組概況,如地址、狀態(tài)、狀態(tài)碼、協(xié)議、方法、時間信息、大小信息等屬性

內(nèi)容
請求的Request(請求)、Response(響應(yīng))信息查看

Request窗口各個Tab:

Response窗口各個Tab:

總結(jié)
選定請求或請求組的綜合信息,如路徑、地址、狀態(tài)等

圖表
選定請求或請求組信息的圖表展示
可展示維度:
時間線
大小
耗時
Type(類型)
Flow(時間與網(wǎng)絡(luò)速度的二維坐標(biāo)圖)

筆記
給請求做純文本筆記

二、下載\安裝與環(huán)境配置:
1、電腦(Mac做示范):
下載地址:https://www.charlesproxy.com/
下載完成后進(jìn)行注冊(如下圖)
Registered Name (賬號): https://zhile.io
License Key (密碼): 48891cf209c6d32bf4(應(yīng)該還能使用)

在 Charles 的菜單欄上選擇 “Proxy”->”Proxy Settings”,填入代理端口 8888(或者自定義,前提是不能和系統(tǒng)已占用端口沖突),并且勾上 “Enable transparent HTTP proxying”

安裝證書:
pc端安裝證書
在Mac上配置Charles證書,Charles菜單欄中的Help——SSL Proxying——Install Charles Root Ce rtificate

如果證書不受信任,請更改為完全信任:

pc端端口配置:
在Charles中設(shè)置需要抓取的URL地址 (Proxy→SSL Proxying Settings..)
首先在charles的 Proxy選項選擇SSL Proxy Settings, 然后在彈出的對話框中點擊add,添加需要監(jiān)視的域名。域名支持 *號通配符,如:抓取所有的https請求,可以填寫 *:443。

2.手機(jī)(iOS做示范)
連接代理:
手機(jī)連接無線網(wǎng)絡(luò)與電腦一致,確保在同一個網(wǎng)絡(luò)環(huán)境
通過 設(shè)置 → 無線局域網(wǎng) ,查看當(dāng)前鏈接的 WIFI 點擊最右邊的感嘆號,進(jìn)入當(dāng)前 WIFI 的細(xì)節(jié)配置頁面,在最下面的 HTTP 代理中,選擇「手動」,然后填寫 Charles 代理機(jī)器的 IP(在charles的 "Help"->"Local IP Addresses") 和 端口號,點擊保存
其中服務(wù)器與端口號可以通過charles查詢,如下:


iOS示例

手機(jī)端安裝證書
使用手機(jī)默認(rèn)瀏覽器(如safari)(安卓如果不能識別證書格式可以試試chrome)
地址欄訪問 chls.pro/ssl 下載證書,安裝證書
注??:在你打開瀏覽器的時候,Charles會出現(xiàn)下面這樣一個彈窗,一定要點擊Allow,同意建立連接,否則你就無法下載證書

輸入地址后:

打開設(shè)置:

注??:ps:如果是iOS10.3.1之前的系統(tǒng),上述三步之后便能夠使用Charles抓取HTTPS的內(nèi)容,但是iOS10.3.1的時候!--還需要在iPhone中的Settings--General--About--Certificate Trust Settings中打開一個信任的開關(guān)。
補(bǔ)充:ios>10 都有這個坑,請注意!??!
中文系統(tǒng):設(shè)置-通用-關(guān)于本機(jī)-滑倒最下面-證書信任設(shè)置-打開 Charles 開關(guān)
至此,Charles的安裝基本完成,現(xiàn)在你可以試著去抓一些接口了
三、Charles常用操作
1.Map Remote
遠(yuǎn)程映射,即:將「符合匹配規(guī)則」的請求映射向「一個遠(yuǎn)程地址」,可修改請求的尋址(url或ip+port)和路徑(path),不可更改請求體內(nèi)容
映射后的響應(yīng)內(nèi)容,由該「遠(yuǎn)程地址」決定
原理示意圖:
開啟前:通過Charles后,仍然請求向原定地址
開啟后:通過Charles后,向新遠(yuǎn)程地址請求

在開發(fā)階段, 為了方便調(diào)試、聯(lián)調(diào)、問題追查, 可以使用代理的方式連接到特定開發(fā)機(jī)。 可以使用charles提供的map remote的方式。


設(shè)置好后,相關(guān)接口的請求會直接打到開發(fā)機(jī)。
2.Map Local
將接口的請求重定向到本地文件
此類操作可稱為“Mock接口”
本地映射,即:將「符合匹配規(guī)則」的請求映射向「一個本地文件」,請求完全在本機(jī)處理完成,不修改請求內(nèi)容,響應(yīng)為文件內(nèi)容
原理圖:
開啟前:通過Charles后,仍然請求向原定地址
開啟后:通過Charles后,由Charles直接返回文件中的接口響應(yīng),不再與服務(wù)器通信



設(shè)置好后,對應(yīng)接口的請求不會打到服務(wù)器,直接返回本地文件中的數(shù)據(jù)。
3.Rewrite
rewrite功能重寫對應(yīng)的內(nèi)容,主要可以對某些匹配請求的header、host、url、path、query param、response status、body進(jìn)行rewrite。




設(shè)置好后,發(fā)送的請求就是修改后的請求了。
4.Repeat
重復(fù)發(fā)送請求
是一手動操作,沒有匹配規(guī)則的限制,可以自定義重復(fù)發(fā)送請求的并發(fā)、間隔等,但不能修改請求內(nèi)容,即是“原樣重發(fā)”
不需要客戶端即可發(fā)送請求


設(shè)置好后,Charles會重復(fù)發(fā)送指定次數(shù)的同一請求到服務(wù)器
5.Throttle Setting
通過throttle setting可以模擬不同的網(wǎng)絡(luò)環(huán)境


6.Compose
Compose功能是在原有的請求基礎(chǔ)上進(jìn)行修改。
在進(jìn)行接口測試時,臨時需要修改請求參數(shù)、參數(shù)值或者Header等等就可以用到Compose功能。
是一手動操作,沒有匹配規(guī)則的限制,可以自定義編輯請求的地址,路徑,參數(shù),內(nèi)容,header等,可手動點“Excute”按鈕執(zhí)行
和Repeat的功能、場景類似,區(qū)別在于,Compose可以編輯請求的內(nèi)容,Repeat不可以
不需要客戶端即可發(fā)送請求


7.Breakpoint
斷點,即:將「符合匹配規(guī)則」的請求中斷,可選擇在“請求”階段或“響應(yīng)”階段中斷,中斷后,請求被暫時攔截到Charles,并展示請求詳細(xì)界面供編輯、執(zhí)行或丟棄
breakpoint功能可以截取發(fā)送給服務(wù)器的請求以及服務(wù)器發(fā)送回的響應(yīng)數(shù)據(jù),截取成功后可以修改后繼續(xù)發(fā)送。





以上便是抓包代理工具Charles的基本原理和操作方式你學(xué)會了么
作者:李二初
鏈接:http://www.itdecent.cn/p/dd6a24f0c73d
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。