# Charles使用介紹
Charles是常用的網絡封包截取工具,在做移動開發和測試時常常需要截取網絡封包來分析。
Charles是通過將自己設置成系統的網絡訪問代理服務器,使得所有的網絡訪問請求都通過它來完成,從而實現了網絡封包的截取和分析, 更多詳細內容移步官方網站:[https://www.charlesproxy.com/](https://links.jianshu.com/go?to=https%3A%2F%2Fwww.charlesproxy.com%2F)
Charles 雖然是收費軟件,但即使不購買也能長期使用,并且功能上不會缺斤短兩。唯一要付出的代價是每次使用時間不能超過 30 分鐘,并且啟動時將會有 10 秒種的延時。
本文旨在介紹下常用的功能,其他更多的功能依據需求自行摸索。
## Charles在移動端測試的主要應用
## 一、Charles抓包HTTP、HTTPS
1、安裝根證書:

Tips: 安裝根證書,默認不信任,需要到鑰匙串里,點擊信任:

將移動設備和本機置于同一個網絡下,在移動設備上的網絡中添加代理 -> 手動 -> 填寫主機名和端口。一般來說,Charles默認的端口是8888,在Proxy -> Proxy Settings可設置。主機名就是本機的IP的地址,在Charles -> Help -> Local IP Address可查看。

一般初次連接時會提示是否允許進行連接,點擊allow允許就好了。如果不小心點擊拒絕,那么有兩種方法,第一種重啟Charles;第二種,Proxy -> Access Contro Settings中添加移動設備的IP地址。

2、Charles抓移動設備HTTPS請求
點開 Help -> SSL Prox -> Install Charles Root Certificate on a Mobile Devices or Remote Browser

提示很明顯,先讓設備連上Chalres,然后在設備上用系統瀏覽器訪問chls.pro/ssl,然后會自動下載一個證書,選擇安裝證書。之后便可以抓取https協議的包了。
通過手機內證書管理程序,從設備存儲空間安裝

之后在需要的請求上,點擊Enable SSL Proxy即可, 或者在Proxy -> SSL Proxy Settings中勾選上Enable,并且添加指定host。

例如抓取全部https,host輸入通配符“ \* ”,port填443。

#### 3、Android 7.0 HTTPS抓包
Android 7.0以上版本,Google更新了網絡安全性配置,不再信任用戶導入的CA根證書。所以即便是安裝了證書,也得不到系統的信任,需要在應用中添加信任才行。
二、Charles過濾請求
一般來說,我們只關心特定HOST的請求。當我們僅想監控這些請求時,可以使用Charles的過濾功能。
1、Record Settings設置include/exclude
Proxy -> Recording Setttings include:需要監控的host。如果列表為空時,默認監控所有請求 exclude:不需要監控的host

2、Filter
Filter一欄中輸入需要要過濾的host或者關鍵字。也可以在勾選上Foucsed,并制定focus哪些host。

3、Repeat
可以使用 Charles 的 Repeat 功能來簡單地測試服務器的并發處理能力,方法如下。
* 我們在想打壓的網絡請求上(POST 或 GET 請求均可)右擊,然后選擇 「Repeat Advanced」菜單項,如下所示:

在彈出的對話框中,選擇打壓的并發線程數以及打壓次數,確定之后即可執行

4、BlackList&WhiteList
黑名單表示對名單內的所有請求做過濾

白名單表示僅對名單內的請求做響應
## 三、Charles網速模擬
1、Throttle Setting
Charles內置幾種網絡模型可直接使用,也可自定義來滿足特定需求。 當然更可以只針對特定host模擬網速,只需要勾選上Only for select hosts就ok了。

四、Charles修改請求及返回值
移動端測試中,Charles最常用的應該就是修改請求返回值了,有幾種方式可以實現。
1、breakpoints
像斷點一樣,當執行到指定規則鏈接時,觸發breakpoints。即可以在請求到服務端前中斷,也可以在返回到客戶端前中斷。在這個過程中便可以修改Request或者ResponseR。不過值得注意的是,在移動端的測試中,使用breakpoints會大概率導致客戶端的請求超時。因為手動修改是需要花時間的,所以一般很少使用斷點的操作來修改請求和返回參數。

2、重定向 -- Map Local、Map Remote
顧名思義,Map Remote 是將指定的網絡請求重定向到另一個網址請求地址,Map Local 是將指定的網絡請求重定向到本地文件。 Map Remote簡單的實例:

Map Local簡單的實例:

3、rewrite
Rewrite 功能功能適合對某一類網絡請求進行一些正則替換。 Rewrite功能很強大,能很方便的在各種測試環境切來切去,就像圖中列表所展示。

- 自動化測試之程
- 第一章:adb——小識
- 一:adb介紹
- 二:adb安裝與卸載
- 三:adb獲取包名
- 四:adb獲取日志
- 五:其他常用命令
- 第二章:LIunx
- 一:Liunx:簡介
- 二:Liunx:常用命令
- 第三章:測試常見面試題
- 一:HTTP與HTTPS
- 二:token-cookie-session
- 三:定位以及數據分離
- 四:接口測試面試題
- 五:Python面試題
- 數據類型
- 1:python面試題
- 六:selenium面試題
- 七:liunx面試題
- 1:liunx查看日志
- 二:文件操作
- 八:WebSocket
- 九:騰訊面試題
- 十:關于adb的面試題
- 小結:不常見的面試題
- 模擬面試
- 第四章:selenium自動化
- 一:selenium介紹以及環境搭建
- 二:selenium項目目錄解析
- 三:selenium項目方法實現
- 四:八大定位方法
- 五:selenium基本操作
- 六:selenium顯示等待和隱式等待
- 七:selenium鍵盤操作
- 八:獲取斷言信息
- 九:selenium窗口操作
- 十:selenium-cookie操作
- 十二:selenium截圖操作
- 第五章:Appium-Python篇
- 一:Appium介紹
- 二:windows搭建Appium
- 三:Mac版Appium搭建IOS
- 四:Appium初次啟動
- 五:Capsbility詳解
- 六:定位元素以及工具介紹
- 七:Appium代碼實現
- 八:Capability配置數據與定位參數分離
- 九:定位方法以及元素等待
- 十:頁面滑動
- 十一:appium截圖
- 十二:Automator簡介
- 十三:uiautomator定位方式
- 十四:Monkey介紹
- 十五:Monkey命令解析
- 十六:Monkey查看日志
- 第六章:接口自動化測試
- 一:什么是接口自動化
- 二:HTTP協議
- 三:Request接口訪問
- 四:unittest使用
- 五:獲取cookie以及請求處理
- 六:接口異常處理
- 七:接口測試框架設計到開發
- 八:接口測試之數據庫操作
- 九:定時任務
- 第七章:Python負載工具Locust
- 一:Locust介紹
- 第八章:搭建測試環境
- 一:安裝java的jdk
- 二:安裝tomcat
- 三:Mysql安裝
- 第九章:ios自動化系列
- 一:ios自動化介紹
- 二:ios自動化環境搭建
- 三:ios常用命令
- 第十章:測試工具系列
- 一:postman系列
- 1:postman介紹
- 2:postman界面介紹
- 3:postman請求實例
- 4:postman高階應用
- 5:collection用例集
- 6:postman上傳圖片
- 7:postman上傳文件
- 8:postman使用Headers
- 二:jmeter
- 三:charles