原文位址:http://www.jianshu.com/p/fdd7c681929c
http://blog.csdn.net/zksmss/article/details/47055073
簡介
Charles其實是一款代理伺服器,通過成為電腦或者浏覽器的代理,然後截取請求和請求結果達到分析抓包的目的。該軟體是用Java寫的,能夠在Windows,Mac,Linux上使用。開發iOS都在Mac系統上吧,安裝Charles的時候要先裝好Java環境。這麼好的軟體不是免費的,官網要好幾十刀呢,我這裡有一個Mac上的破解版,點選這裡下載下傳,當然不是最新版的。如果你想體驗最新版,Charles是提供試用的。
Charles主要功能
- 支援SSL代理。可以截取分析SSL的請求。
- 支援流量控制。可以模拟慢速網絡以及等待時間(latency)較長的請求。
- 支援AJAX調試。可以自動将json或xml資料格式化,友善檢視。
- 支援AMF調試。可以将Flash Remoting 或 Flex Remoting資訊格式化,友善檢視。
- 支援重發網絡請求,友善後端調試。
- 支援修改網絡請求參數。
- 支援網絡請求的截獲并動态修改。
- 檢查HTML,CSS和RSS内容是否符合W3C标準。
開始抓包
先看一下Charles的廬山真面目吧!

接下來要把電腦設定為代理
這樣你會發現,你通過浏覽器請求的網址都會出現在這裡,iOS模拟器的所有的網絡請求也會出現在這裡。點選某一個網址後,你會發現右邊會出現這個網址請求的大概資訊,點選具體的請求後會出現request和response等資訊
如果你發現傳回的是亂碼,首先看是在http請求還是https請求,如果是http請求,那麼應該就是傳回來的中文亂碼,解決方案是找到該軟體顯示包内容,Contents目錄下的info.plist,打開檔案找到
vmoption
,添加
-Dfile.encoding=UTF-8
即可。
如果是https請求出現的亂碼,如下圖這種情況
這時候你就需要安裝Charles的CA憑證了,首先到去http://www.charlesproxy.com/ssl.zip 下載下傳CA憑證檔案。輕按兩下crt檔案,選擇總是信任就可以了,當然如果要抓取iPhone裝置上的HTTPS請求,需要在iPhone上也安裝一個證書,在手機浏覽器輸入這個網址:http://charlesproxy.com/getssl ,點選安裝即可。然後你就可以告别那煩人的亂碼,可以愉快地抓包了。
補充:charles解決安卓https抓包亂碼
1、help->ssl proxying->install charles root certificate
2、help->ssl proxying->install charles root certificate on a mobile device or remote...
3、Proxy->ssl proxying settings->add
4、在安卓手機上用浏覽器打開第二步中提示的位址,安裝證書
5、重新開機charles,重新開機手機網絡。
抓取真機上的包
抓取真機上的資料非常的簡單,首先使手機和電腦在一個區域網路内,不一定非要是一個ip段,隻要是同一個路由器下就可以了。按照上面說的把證書安裝好,然後找到電腦的IP,你可以選擇在終端輸入
ifconfig en0
來擷取,也可以選擇打開網絡偏好設定來檢視。
終端擷取IP
網絡偏好設定檢視IP
接下來打開Charles的代理設定:
Proxy->Proxy Settings
,設定一下端口号,預設的是8888,這個隻要不和其他程式的沖突即可,并且勾選
Enable transparent HTTP proxying
。
端口号設定
在手機上連接配接上和電腦在同一區域網路的網絡上設定HTTP代理。端口号就是剛剛在Charles上設定的那個。
然後在手機上随便打開一個網址,這是Charles會彈出一個框讓你确認是否代理,點選allow就可以了,然後你就會在Charles上發現手機上的請求了。
過濾
在 Charles 的菜單欄選擇
Proxy->Recording Settings
,然後選擇
Include
欄,選擇
Add
,然後填入需要監控的協定,主機位址,端口号,這樣就達到了過濾的目的。如下圖:
還有一種方法就是在一個網址上右擊,選擇
Focus
,然後其他的請求就會被放到一個叫Other Host的檔案夾裡面,這樣也達到了過濾的目的。
斷點
斷點的功能搞開發不會不知道,在Charles發起一個請求的時候,我們是可以給某個請求打一個斷點的,然後來觀察或者修改請求或者傳回的内容,但是在這過程中藥注意請求的逾時時間問題。要針對某一個請求設定斷點,隻需要在這個請求網址右擊選擇Breakpoints就可以斷點某一個請求了。
模拟網速慢
有時候在開發的時候我們想要模拟一下網絡慢的情況,這時候Charles他是可以幫助到你的,在
Proxy
->
Throttle Setting
,然後選擇
Enable Throttling
,在
Throttle Preset
下選擇網絡類型即可,具體設定你可以自行拿捏。
請求重定向
請求重定向的作用是什麼呢?開發中一般都是測試環境,如果我們想對比一下和線上版本的差別的話,可以講測試的請求重定向到正式環境下。在選擇
Tools
->`Map Remote下:
内容替換
有時候我們會測一下請求的參數不同會帶來不同的傳回結果以測試是否達到業務需求,或者需要不同的傳回結果來驗證我們對資料的處理是否正确,這時候需要背景的同僚配合,但是有了Charles,我們可以自己把控接口傳回來的内容,比如資料的空與否,資料的長短等等。在
Tools
->
Rewrite Settings
下:
其他
Charles還有一下其他的妙用。慢慢的去發掘吧!