charles簡介
charles是一款非常優秀的抓包工具,全平台支持,在mac,windows,linux上都可以使用,既可以抓取web端的包,也可以抓app端的包。
charles主要的功能包括如下幾點:
-
截取 Http 和 Https 網絡封包。
-
支持重發網絡請求,方便后端調試。
-
支持修改網絡請求參數。
-
支持網絡請求的截獲並動態修改。
-
支持模擬慢速網絡
代理服務器的工作原理如下所示:

客戶端發起請求,請求通過charles轉發給服務器,服務器返回響應,響應通過charles轉發給客戶端。
charles所起的作用就相當於信使,把信息從A傳遞給B,並且把回信從B傳遞給A,正因為他這個信使的工作,所以他對信息的內容了如指掌(不管是原信還是回信),正因為如此,charles也就可以篡改信息的內容,即篡改請求和響應。
安裝
mac電腦參考這個連接進行安裝和破解:https://www.jianshu.com/p/82f63277d50f
windows電腦下載網盤里的軟件進行安裝和破解
鏈接:https://pan.baidu.com/s/1AkDV5VAbVWw_uWTBW3biyw
提取碼:emj4
基本設置
開啟代理(默認就是開啟的)

https設置及安裝證書
1.先設置代理

2.安裝證書




3.設置ssl代理
單擊菜單項“代理”->“SSL 代理設置”

單擊【添加】,在彈出的“編輯位置”窗口中,主機、端口文本框均輸入星號,如下截圖所示,單擊“編輯位置”窗口中的【確定】

然后在“SSL 代理設置”窗口中,單擊【確定】
4.chrome瀏覽器的單獨設置
對於chrome瀏覽器上的https抓包需要按照如下操作進行
先保存charles證書,保存時選擇二進制


打開chrome瀏覽器的設置界面,搜索證書,進入證書管理界面






手機端抓包配置
手機連接代理設置
首先確保手機和charles所在的電腦在同一個局域網下,然后設置手機的代碼連接,長按手機的wifi,打開修改網絡
其中的ip是charles所在電腦的ip,端口是charles代理設置那里看到的端口號8888
第一次連接代理時,charles會彈出確認框,記得點允許

手機瀏覽器輸入chls.pro/ssl會提示下載證書,下載並安裝即可
ios手機還需要在設置 - 通用 - 關於本機 - 證書信任設置里信任證書
功能圖標

-
從左到右依次是
-
清除當前會話
-
停止記錄
-
開始限流/停止限流
-
開始斷點/停止斷點
-
根據所寫內容撰寫新請求
-
重發選定請求
-
工具
-
設置
抓包視圖
charles抓包的請求信息可以以兩種方式展示,一種是結構化展示,一種是序列化展示
1.結構

結構化展示方式,會以某個網址作為管理根本,然后按照各個請求的路徑層級進行分類展示,如上圖所示,我們最終要的純接口
請求實際上是api下的login2
2.序列

序列是按照抓到的請求逐個排列的,一行就是一個,每一列都代表着不同的含義
3.請求信息查看

在請求發起信息中的一些標簽含義:
-
標頭:請求header信息
-
文本:請求參數的文本形式
-
十六進制:請求參數的十六進制形式
-
表單:請求參數的表單形式
-
原始數據:請求發起的所有信息,在這里可以看到請求發起的所有信息
在請求響應信息中的一些標簽含義:
-
標頭:服務器響應的header信息
-
文本:響應內容的文本形式
-
十六進制:響應內容的十六進制形式
-
JavaScript:響應內容的js形式
-
JSON:響應內容的JSON格式形式
-
JSON文本:響應內容的JSON格式文本形式
-
原始數據:服務器響應信息的所有內容都在這里
請求過濾
通常情況下我們可能會抓包非常多的請求,那么為了方便我們查找自己的目標請求,可以針對性的設置一些過濾條件
快捷過濾方式

多條件過濾
上方工具欄的代理—記錄設置—包括—添加

接口請求調試
1.選中要調試的請求,右鍵-->撰寫

2.修改參數並執行


這種方式也可以理解為篡改請求報文,再次發起請求的方式
斷點
斷點的意思就是請求發起或者響應時會被暫停,使用者可以根據自己的需求編輯篡改請求報文或者響應報文,以達到不可告人的目的
斷點設置
在上方菜單欄代理-->斷點設置,點開后添加,添加后當捕獲的請求命中設置的各項信息,就會被暫停

執行請求,篡改報文
要么在頁面上重新訪問,要么再charles里右鍵請求點擊重發,都可以進入編輯報文的界面


接口請求映射
在斷點中篡改報文並不是很方便,每次都得改,那么為了一勞永逸的修改某個接口的響應信息,可以通過接口映射的方式,將指定接口的響應信息指向我期望的本地文件或者遠程接口
本地映射
本地映射的意思就是將某個接口的響應內容指向本地文件,因此我們先創建一個本地文件,針對碼同學全棧接口項目的
登錄接口做本地映射,創建一個txt文件,寫入如下內容,這內容里改了響應信息中的code是500:
點擊查看代碼
{"code":"500","message":"success","data":"04cec0658e9a4e55906bdd37416e2841"}
設置本地映射:在上方菜單欄工具-->本地映射

然后重發(回放)目標接口,查看響應

遠程映射
先來看一個場景
“app在線上出現了問題,你想測下在測試環境是否有問題,其實就是你想用線上的包發請求時不要發線上,發到測試環境。或者 有個app需要測試,測試環境已經測試完成,需要到灰度環境測試。但是,現在沒有灰度環境對應的app,那怎么辦”
有兩種方法能解決:
-
一種是讓開發給你重新打包,把里面請求線上的地址換成測試的地址
-
一種是在charles里做域名映射 如果開發忙沒有時間給你打包,那我們就可以直接在charles里域名映射
域名映射
設置遠程映射:在上方菜單欄工具-->遠程映射

訪問原域名都會去訪問目標域名了
重寫
重寫功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。
可以重寫接口所有元素的內容:header、host、url、path、query param、response status、body.
比如我要模擬響應狀態碼的異常情況:在上方菜單欄工具-->重寫
添加一個規則

添加匹配請求

添加重寫規則

確定以后,在頁面訪問,登錄接口響應狀態碼會被改成500

除了針對響應狀態碼,其他接口的信息也可以被重寫,可以在重寫規則那里進行選擇

