Charles
????是一個(gè)HTTP代理服務(wù)器,HTTP監(jiān)視器,反轉(zhuǎn)代理服務(wù)器,當(dāng)程序連接Charles的代理訪問互聯(lián)網(wǎng)時(shí),Charles可以監(jiān)控這個(gè)程序發(fā)送和接收的所有數(shù)據(jù)。它允許一個(gè)開發(fā)者查看所有連接互聯(lián)網(wǎng)的HTTP通信,這些包括request, response和HTTP headers (包含cookies與caching信息)。
Charles主要功能:
1. 支持SSL代理。可以截取分析SSL的請(qǐng)求。
2. 支持流量控制。可以模擬慢速網(wǎng)絡(luò)以及等待時(shí)間(latency)較長的請(qǐng)求。
3. 支持AJAX調(diào)試。可以自動(dòng)將json或xml數(shù)據(jù)格式化,方便查看。
4. 支持AMF調(diào)試。可以將Flash Remoting 或 Flex Remoting信息格式化,方便查看。
5. 支持重發(fā)網(wǎng)絡(luò)請(qǐng)求,方便后端調(diào)試。
6. 支持修改網(wǎng)絡(luò)請(qǐng)求參數(shù)。
7. 支持網(wǎng)絡(luò)請(qǐng)求的截獲并動(dòng)態(tài)修改。
8. 檢查HTML,CSS和RSS內(nèi)容是否符合W3C標(biāo)準(zhǔn)。
Charles安裝:
????去Charles的官方網(wǎng)站(http://www.charlesproxy.com)下載最新版的相應(yīng)操作系統(tǒng)的Charles安裝包安裝即可。
????Charles是收費(fèi)軟件,可以免費(fèi)試用30天。試用期過后,未付費(fèi)的用戶仍然可以繼續(xù)使用,但是每次使用時(shí)間不能超過30分鐘,并且啟動(dòng)時(shí)將會(huì)有10秒種的延時(shí)。
????因此,該付費(fèi)方案對(duì)廣大用戶還是相當(dāng)友好的,即使你長期不付費(fèi),也能使用完整的軟件功能。只是當(dāng)你需要長時(shí)間進(jìn)行封包調(diào)試時(shí),會(huì)因?yàn)镃harles強(qiáng)制關(guān)閉而遇到影響。
Charles 主要提供兩種查看封包的視圖,分別名為 “Structure” 和 “Sequence”。
? ? 1. Structure 視圖將網(wǎng)絡(luò)請(qǐng)求按訪問的域名分類。
? ? 2. Sequence 視圖將網(wǎng)絡(luò)請(qǐng)求按訪問的時(shí)間排序。
下面將一一介紹這些如何配置和使用
一.?將Charles設(shè)置成系統(tǒng)代理
Charles 是通過將自己設(shè)置成代理服務(wù)器來完成抓包的,勾選系統(tǒng)代理后,系統(tǒng)本地發(fā)出去的請(qǐng)求都能被截取下來。如果只抓取APP的包的話,可關(guān)閉此配置,這樣不會(huì)出現(xiàn)太多的數(shù)據(jù)看著比較亂。
Windows:
????需要注意的是,Chrome 和 Firefox 瀏覽器默認(rèn)并不使用系統(tǒng)的代理服務(wù)器設(shè)置,而 Charles 是通過將自己設(shè)置成代理服務(wù)器來完成封包截取的,所以在默認(rèn)情況下無法截取 Chrome 和 Firefox 瀏覽器的網(wǎng)絡(luò)通訊內(nèi)容。如果你需要截取的話,在 Chrome 中設(shè)置成使用系統(tǒng)的代理服務(wù)器設(shè)置即可,或者直接將代理服務(wù)器設(shè)置成 127.0.0.1:8888 也可達(dá)到相同效果。
二.?截取移動(dòng)設(shè)備上的網(wǎng)絡(luò)請(qǐng)求包
我們?cè)谡{(diào)試移動(dòng)APP時(shí),需要抓取APP發(fā)送的數(shù)據(jù)包,首先進(jìn)行設(shè)置,Proxy -> Proxy Settings默認(rèn)端口是8888,根據(jù)實(shí)際情況可修改。
查看本機(jī)IP地址:Help -> Local IP Addresses
然后配置手機(jī)代理:
IOS和Android配置差不多
打開要調(diào)試的APP,請(qǐng)求就會(huì)先發(fā)送到Charles,然后驗(yàn)證是否允許訪問。
當(dāng)點(diǎn)擊允許后,可以在Proxy -> Access Control Settings里看到可以訪問此代理服務(wù)器列表
注意
如果不小心點(diǎn)擊了拒絕,可以手動(dòng)添加手機(jī)IP/Mac地址到允許訪問列表,或者重啟Charles,手機(jī)再次訪問,會(huì)再次提示選擇。
如果不想每換一個(gè)手機(jī)都要進(jìn)行驗(yàn)證,可以配置允許所有手機(jī)訪問,加入
0.0.0.0/0(IPv4)或::/0(IPv6)
現(xiàn)在就可以抓包了,拿一款我們公司開發(fā)的樂視車聯(lián)APP來做測試:
三.?過濾網(wǎng)絡(luò)請(qǐng)求
通常情況下,網(wǎng)絡(luò)請(qǐng)求是非常大量的,從幾十個(gè)請(qǐng)求里找到我們需要的觀察的某個(gè)請(qǐng)求比較費(fèi)時(shí),那么我們就需要對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行過濾,只監(jiān)控向指定目錄服務(wù)器上發(fā)送的請(qǐng)求。有兩種方法:
1. 在Sequence界面的中部的Filter欄中填入需要過濾出來的關(guān)鍵字。例如我們的服務(wù)器的地址是:*.leautolink.com,那么只需要在Filter欄中填入leautolink即可。(一般用于臨時(shí)過濾)
2. 在Charles的菜單欄選擇"Proxy"->"Recording Settings",然后選擇Include欄,選擇添加一個(gè)項(xiàng)目,然后填入需要監(jiān)控的協(xié)議,主機(jī)地址,端口號(hào)。這樣就可以只截取目標(biāo)網(wǎng)站的封包了。如下圖所示:(固定過濾地址)
四.?代理轉(zhuǎn)發(fā)
? ?實(shí)際開發(fā)時(shí),有這樣的場景,服務(wù)端線上版本有bug,你在本地修改程序后,需要模擬實(shí)際的線上環(huán)境,來驗(yàn)證程序的正確性,最笨的方法就是讓客戶端修改一下APP的調(diào)用地址到你本機(jī),然后重新打一個(gè)版本供你模擬測試,這樣雖然可以,但每次遇到bug都要這么做的話,那效率極其低下,然而Charles為我們解決了這個(gè)問題。
請(qǐng)求轉(zhuǎn)發(fā),把調(diào)用方調(diào)用的地址轉(zhuǎn)發(fā)到你本機(jī)地址的程序進(jìn)行執(zhí)行。
右鍵 -> Map Remote ...
并且配置Tools -> Map Romote
運(yùn)行APP
五. Https請(qǐng)求抓包
默認(rèn)我們是看不到https的請(qǐng)求數(shù)據(jù)的。我們需要安裝證書。
Mac:
雙擊打開Charles Proxy CA
手機(jī)配置完代理(必須的操作)后,瀏覽器打開http://chls.pro/ssl
然后配置Proxy -> SSL Proxying Settings... 添加要抓取的https請(qǐng)求
然后再次請(qǐng)求:
如果不再使用Charles,想刪除手機(jī)里的證書文件怎么刪除呢?
設(shè)置->通用->描述文件與設(shè)備管理,刪除指定的證書即可
Windows:
下一步
然后繼續(xù)下一步直到導(dǎo)入成功。
剩下的配置與Max下配置相同
SSL的問題:
????最近iPhone系統(tǒng)更新到ios 10.3后,用Charles抓包竟然出現(xiàn)了一些問題,https的請(qǐng)求都會(huì)失敗,提示錯(cuò)誤信息為Failure SSLHandshake: Received fatal alert: unknown_ca 和You may need to configure your browser or application to trust the Charles Root Certificate. 然而之前任何問題都沒有,并且相關(guān)設(shè)置都正確:電腦上安裝了Charles的根證書,并且設(shè)置了始終信任,然后手機(jī)上也登錄了http://chls.pro/ssl安裝了描述文件,一切都按正常程序走的,但是錯(cuò)誤始終無法解決.
原因:
????雖然charles的根證書已經(jīng)在安裝列表中顯示,但它是被關(guān)閉的。在iOS 10.3之前,當(dāng)你將安裝一個(gè)自定義證書,iOS會(huì)默認(rèn)信任,不需要進(jìn)一步的設(shè)置。而iOS 10.3之后,安裝新的自定義證書默認(rèn)是不受信任的。如果要信任已安裝的自定義證書,需要手動(dòng)打開開關(guān)以信任證書。
解決:
設(shè)置->通用->關(guān)于本機(jī)->證書信任設(shè)置-> 找到charles proxy custom root certificate然后信任該證書即可.
Windows系統(tǒng)無法上網(wǎng)的問題
????在windows下,如果Charles沒有正常關(guān)閉,或者系統(tǒng)重啟后無法上網(wǎng)的問題,因?yàn)镃harles做了系統(tǒng)代理,當(dāng)上網(wǎng)的時(shí)候,首先先訪問代理服務(wù)器,然后代理再去鏈接網(wǎng)絡(luò),這時(shí)候Charles是非正常關(guān)閉的,只要重新打開Charles即可上網(wǎng)正常,正常關(guān)閉Charles后同樣沒問題。
備注:此文轉(zhuǎn)載至csdn博主胡扯程序,原文地址:https://blog.csdn.net/mxw2552261/article/details/78645118