Charles是一款非常好用的抓包工具,通常使用它來進行APP開發抓包調試,尤其是HTTPS請求。
去官網(https://www.charlesproxy.com/)下載軟件並安裝。
安裝完畢后,開啟系統代理(本測試在windows環境進行),菜單->Proxy->Windows Proxy前面打鈎,就開啟了windows系統代理,可以看到系統的http請求。
windows檢測是否開啟系統代理,IE->工具->Internet 選項->連接->局域網設置->為 LAN 使用代理服務器->高級,如圖1.1所示。
圖1.1 查看windows系統代理
如果chrome和firefox請求沒有被抓包,只需要將其設置成系統代理,或直接手動設置代理地址:127.0.0.1:8888。
當只需要觀察目標請求數據時,可以過濾其他請求數據。
1、設置方法一: Proxy->Recording Settings->Include,點擊Add添加需要觀測的地址即可,如圖2.1所示。
圖2.1 過濾網絡請求設置方法一
2、設置方法二:在Sequence界面中輸入Filter地址,如圖2.2所示。
3、設置方法三:臨時過濾,右擊需要觀察的請求,選擇Focus,然后在Sequence界面右側勾選Focused單選框,即可臨時過濾觀察請求,如圖2.2所示。
圖2.2 過濾網絡請求設置方法二、三
要抓取APP請求數據,必須讓APP使用與charles所在pc同一網段的網絡,讓APP請求經過charles代理。
1、開啟並設置APP代理
操作步驟:
1) 開啟charles代理,設置:Proxy->Proxy Sesstings->Proxied,設置Port=8888,並選擇"Enable transparent HTTP proxying"單選框,開啟透明代理。
2) 設置APP代理,在對應wifi中設置代理,地址為charles所在pc的ip地址,端口為8888。
開啟后,即可抓取APP的http請求。
2、抓取APP的https請求
在文章《HTTPS到底是個什么鬼?》中,我們已經分析了https的相關資料,https存在的目的就是為了保障通訊數據的隱私性。那么需要抓取https數據,必須安裝charles的CA證書,讓charles在https交互中起到中間人監聽的目的。
操作步驟:選擇Help->SSL Proxying->Install Charles Root Certificate on a Mobile Device or Remote Browser,看到彈出如圖3.1對話框。 
圖3.1 安裝APP之ca證書
根據提示好像需要設置APP的代理為192.168.155.1:8888,然實際經筆者多次嘗試,發現此步驟不需要修改APP的代理(仍為之前的APP代理地址),根據提示修改代理后反而無法打開頁面。然后APP瀏覽器訪問地址:chls.pro/ssl,根據提示下載安裝ca證書即可,如圖3.2所示。

圖3.2 app端安裝ssl證書
有些安卓機型可能只是下載 pem 證書,無法直接安裝證書,此時需要在“設置”->“安全和隱私”->“更多安全設置”->“從 SD 卡安裝”,選擇剛才下載的 pem 證書安裝即可。
IOS 系統要記得開啟證書信任。
安裝完畢后,charles默認並不截取https內容,在需要截取的https請求上右擊,選擇SSL Proxy菜單,即可截取https請求。
3、抓取pc的https請求
選擇Help->SSL Proxying->Install Charles Root Certificate,下載安裝證書即可。
1、模擬慢速網絡環境
有時候需要測試APP在慢網速情況下的表現,剛好charles提供了此功能。點擊Proxy->Throttle Sessing選項,勾選上Enable Throttling選項,下方可以選擇需要模擬的網速,包含常見的3G和4G,如圖4.1所示。

圖4.1 設置慢速網絡環境
2、修改請求參數
chales提供了調試工具,可以修改請求參數,在Sequence視圖下,選擇需要修改的請求,點擊Edit即可,如圖4.2所示。

圖4.2 修改請求參數
3、簡單對服務器接口進行壓力測試
charles提供了多線程並發發起請求,可以簡單測試服務器接口的並發表現。開啟方法,右擊需要發送的請求,選擇Repeat Advanced,設置並發線程數以及每個線程執行的次數即可,如圖4.3所示。

圖4.3 設置並發請求
4、修改服務器響應內容
charles提供了Map、Rewrite和Beakpoints來調試修改服務器響應內容,這三個功能都可以修改服務器響應的內容,他們區別是:① Map功能適合長期調試修改某一接口到某地址(網絡文件或本地文件),可以直接按要求事先指定文件內容;② Rewrite功能可以對網絡請求進行一些正則替換,適合相同正則處理多個同類請求;③ Breakpoints功能可以進行臨時斷點調試,允許求改請求和響應內容。
1) Map功能
右鍵請求,可以看到有Map Local和Map Remote,Map Local可以將請求指定到本地文件,Map Remote可以將請求指定到遠程文件地址。可以使用右鍵->Save Response來迅速保存請求響應,然后可以對響應內容進行修改,其中Map Local設置如圖4.4所示。

圖4.4 Map Local功能設置
2) Rewrite功能
可以實現設置Rewrite規則,然后再對需要的請求開啟Rewrite替換。設置Rewrite規則步驟,Tools->Rewrite Settings,勾選Enable Rewrite選項,具體設置界面如圖4.5所示。
圖4.5 Rewrite規則配置界面
然后對需要進行Rewrite的請求,只需開啟就行,開啟步驟如圖4.6所示。

圖4.6 對某個請求開啟Rewrite功能
3) Breakpoints功能
使用Breakpoints可以臨時調試請求,允許修改請求和響應參數,對於需要開啟斷點調試的請求,右鍵勾選Breakpoints選項即可,使用界面如圖4.7所示。

圖4.7 開啟Breakpoints功能
1) APP已安裝charles證書,抓取https請求時,顯示"unknown",如圖5.1所示。

圖5.1 APP抓取https顯示"unknown"錯誤
解決:APP未設置證書信任,“通用->關於本機->證書信任設置->CA勾選”即可。
