Charles是一個HTTP代理服務器,HTTP監視器,反轉代理服務器,當程序鏈接Charles的代理訪問互聯網時,Charles能夠監控這個程序發送和接收的全部數據。它容許一個開發者查看全部鏈接互聯網的HTTP通訊,這些包括request, response和HTTP headers (包含cookies與caching信息)。ios
Charles主要功能:json
1. 支持SSL代理。能夠截取分析SSL的請求。windows
2. 支持流量控制。能夠模擬慢速網絡以及等待時間(latency)較長的請求。後端
3. 支持AJAX調試。能夠自動將json或xml數據格式化,方便查看。瀏覽器
4. 支持AMF調試。能夠將Flash Remoting 或 Flex Remoting信息格式化,方便查看。服務器
5. 支持重發網絡請求,方便後端調試。cookie
6. 支持修改網絡請求參數。網絡
7. 支持網絡請求的截獲並動態修改。app
8. 檢查HTML,CSS和RSS內容是否符合W3C標準。測試
Charles安裝:
去Charles的官方網站(http://www.charlesproxy.com)下載最新版的相應操做系統的Charles安裝包安裝便可。
Charles是收費軟件,能夠免費試用30天。網上有不少破解版,推薦個好的網站:http://www.sdifen.com/
Charles的功能很強大,咱們這裏只介紹幾個經常使用的而且很是實用的功能:
1. 將Charles設置成系統代理
2. 截取移動設備上的網絡請求包
2.1手動重複請求(Repeat,Advanced Repeat)
2.2手動模擬請求(Compose)
2.3修改網絡請求內容(Compose)
3. 過濾網絡請求
4. 代理轉發
5. 支持https請求抓包(若是配置了仍是抓不到,下面有解決方案)
Charles 主要提供兩種查看封包的視圖,分別名爲 「Structure」 和 「Sequence」。
1. Structure 視圖將網絡請求按訪問的域名分類。
2. Sequence 視圖將網絡請求按訪問的時間排序。
配置和使用:
一. 將Charles設置成系統代理
Charles 是經過將本身設置成代理服務器來完成抓包的,勾選系統代理後,系統本地發出去的請求都能被截取下來。若是隻抓取APP的包的話,可關閉此配置,這樣不會出現太多的數據看着比較亂。
Mac
Windows:
須要注意的是,Chrome 和 Firefox 瀏覽器默認並不使用系統的代理服務器設置,而 Charles 是經過將本身設置成代理服務器來完成封包截取的,因此在默認狀況下沒法截取 Chrome 和 Firefox 瀏覽器的網絡通信內容。若是你須要截取的話,在 Chrome 中設置成使用系統的代理服務器設置便可,或者直接將代理服務器設置成 127.0.0.1:8888 也可達到相同效果。
二. 截取移動設備上的網絡請求包
咱們在調試移動APP時,須要抓取APP發送的數據包,首先進行設置,Proxy -> Proxy Settings默認端口是8888,根據實際狀況可修改。
查看本機IP地址:Help -> Local IP Addresses
而後配置手機代理:
IOS和Android配置差很少
打開要調試的APP,請求就會先發送到Charles,而後驗證是否容許訪問。
當點擊容許後,能夠在Proxy -> Access Control Settings裏看到能夠訪問此代理服務器列表
注意
若是不當心點擊了拒絕,能夠手動添加手機IP/Mac地址到容許訪問列表,或者重啓Charles,手機再次訪問,會再次提示選擇。
若是不想每換一個手機都要進行驗證,能夠配置容許全部手機訪問,加入
0.0.0.0/0(IPv4)或::/0(IPv6)
如今就能夠抓包了,拿一款APP來作測試:
三. 過濾網絡請求
一般狀況下,網絡請求是很是大量的,從幾十個請求裏找到咱們須要的觀察的某個請求比較費時,那麼咱們就須要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。有兩種方法:
1. 在Sequence界面的中部的Filter欄中填入須要過濾出來的關鍵字。例如咱們的服務器的地址是:*.leautolink.com,那麼只須要在Filter欄中填入leautolink便可。(通常用於臨時過濾)
2. 在Charles的菜單欄選擇"Proxy"->"Recording Settings",而後選擇Include欄,選擇添加一個項目,而後填入須要監控的協議,主機地址,端口號。這樣就能夠只截取目標網站的封包了。以下圖所示:(固定過濾地址)
四. 代理轉發
實際開發時,有這樣的場景,服務端線上版本有bug,你在本地修改程序後,須要模擬實際的線上環境,來驗證程序的正確性,最笨的方法就是讓客戶端修改一下APP的調用地址到你本機,而後從新打一個版本供你模擬測試,這樣雖然能夠,但每次遇到bug都要這麼作的話,那效率極其低下,然而Charles爲咱們解決了這個問題。
請求轉發,把調用方調用的地址轉發到你本機地址的程序進行執行。
而且配置Tools -> Map Romote
運行APP
五. Https請求抓包
默認咱們是看不到https的請求數據的。咱們須要安裝證書。
Mac:
雙擊打開Charles Proxy CA
而後配置Proxy -> SSL Proxying Settings... 添加要抓取的https請求
而後再次請求:
若是再也不使用Charles,想刪除手機裏的證書文件怎麼刪除呢?
設置->通用->描述文件與設備管理,刪除指定的證書便可
Windows:
下一步
而後繼續下一步直到導入成功。
剩下的配置與Max下配置相同。
SSL的問題:
最近iPhone系統更新到ios 10.3後,用Charles抓包居然出現了一些問題,https的請求都會失敗,提示錯誤信息爲Failure SSLHandshake: Received fatal alert: unknown_ca 和You may need to configure your browser or application to trust the Charles Root Certificate. 然而以前任何問題都沒有,而且相關設置都正確:電腦上安裝了Charles的根證書,而且設置了始終信任,而後手機上也登陸了http://chls.pro/ssl安裝了描述文件,一切都按正常程序走的,可是錯誤始終沒法解決.
緣由:
雖然charles的根證書已經在安裝列表中顯示,但它是被關閉的。在iOS 10.3以前,當你將安裝一個自定義證書,iOS會默認信任,不須要進一步的設置。而iOS 10.3以後,安裝新的自定義證書默認是不受信任的。若是要信任已安裝的自定義證書,須要手動打開開關以信任證書。
解決:
設置->通用->關於本機->證書信任設置-> 找到charles proxy custom root certificate而後信任該證書便可.
Windows系統沒法上網的問題
在windows下,若是Charles沒有正常關閉,或者系統重啓後沒法上網的問題,由於Charles作了系統代理,當上網的時候,首先先訪問代理服務器,而後代理再去連接網絡,這時候Charles是非正常關閉的,只要從新打開Charles便可上網正常,正常關閉Charles後一樣沒問題。
## 其餘高級功能 ##
1、斷點調試
二、對要打斷點的接口右鍵,選擇【Breakpoints】
簡單教程:https://blog.csdn.net/mxw2552261/article/details/78645118
入門到精通:https://blog.devtang.com/2015/11/14/charles-introduction/