Charles,抓包利器,不僅能抓HTTP,還能抓HTTPS,當(dāng)然并不是所有的HTTPS都能抓到,簡(jiǎn)單試了一下,HTTPS中簡(jiǎn)書的數(shù)據(jù)抓不到,開源中國的數(shù)據(jù)是可以的,下面就針對(duì)Mac環(huán)境下對(duì)iPhone(iOS 11)上的數(shù)據(jù)抓取簡(jiǎn)單介紹一下Charles的使用。
本文主要涉及以下幾個(gè)步驟:
- 下載
Charles - 配置
Charles - 手機(jī)設(shè)置代理
- 手機(jī)端安裝證書并信任
-
Charles針對(duì)某個(gè)域名設(shè)置HTTPS配置 - 重新發(fā)送請(qǐng)求,拿到數(shù)據(jù)
- 抓取某個(gè)域名下的數(shù)據(jù)
- 模擬慢網(wǎng)
- 網(wǎng)絡(luò)請(qǐng)求斷點(diǎn)
- 網(wǎng)絡(luò)請(qǐng)求重發(fā)
- 其它
下載
首先下載 Charles(土豪可以直接購買,小白就下載個(gè)破解版吧),給個(gè)百度云鏈接: 密碼:fitm,版本為4.1.4,直接安裝就行,已破解。
配置
安裝后會(huì)提示是否允許Charles進(jìn)行控制,點(diǎn)擊允許,具體界面就不貼了(已經(jīng)安裝過,就提示一次)。文字都是抽象的,看圖說話:
- 打開
Charles,在Proxy中分別針對(duì)Proxy Setting和SSL Proxying Settings進(jìn)行設(shè)置:
1、設(shè)置代理.png - 端口號(hào)可以為
8888、9999等等,手機(jī)代理設(shè)置時(shí)要與此端口保持一致

- 這個(gè)地方可以添加需要攔截的
HTTPS相應(yīng)的域名,端口一般都是443,如果怕填錯(cuò)或者不準(zhǔn)確,可以按圖14進(jìn)行設(shè)置
3、HTTPS設(shè)置.png - 這個(gè)是在
Charles中的help進(jìn)行設(shè)置的,圖少截了一部分,安裝證書并進(jìn)行信任
4、Mac安裝證書.png
5、檢查證書是否信任.png
6、信任證書.png
手機(jī)設(shè)置代理
- 保證手機(jī)與電腦連接的是同一個(gè)Wifi,手機(jī)設(shè)置代理:




手機(jī)端安裝證書并信任
-
然后
Safari打開手機(jī)證書安裝地址:http:\charlesproxy.com/getssl/,會(huì)出現(xiàn)如下界面,直接點(diǎn)擊安裝,注意:手機(jī)打開這個(gè)地址的時(shí)候要保證代理已經(jīng)設(shè)置完成,否則證書下載不了
11、安裝手機(jī)證書.png -
下載完成后對(duì)證書進(jìn)行信任,這個(gè)地方需要注意的是之前是在
通用-->描述文件與設(shè)備管理中對(duì)證書進(jìn)行信任,現(xiàn)在又增加了一項(xiàng),在關(guān)于本機(jī)-->證書信任設(shè)置中也要對(duì)證書進(jìn)行設(shè)置,否則無法抓取HTTPS的內(nèi)容
12、設(shè)備管理進(jìn)行信任.jpeg
13、關(guān)于本機(jī)進(jìn)行信任.jpeg
針對(duì)域名進(jìn)行SSL代理設(shè)置
-
回到Charles,對(duì)要請(qǐng)求的地址進(jìn)行SSL設(shè)置(如果第2步?jīng)]做的話,已做過請(qǐng)忽略)
14、允許SLL代理.png -
重新請(qǐng)求數(shù)據(jù),就能抓取包內(nèi)容
15、抓取數(shù)據(jù).png
抓取某個(gè)域名下的數(shù)據(jù)
現(xiàn)在數(shù)據(jù)是抓取到了,但是我們發(fā)現(xiàn)一個(gè)問題,當(dāng)你打開一個(gè)app的時(shí)候,可能會(huì)進(jìn)行很多不相干的請(qǐng)求,比如用的一些第三方,或者蘋果自己的或者其他的一些請(qǐng)求,這些請(qǐng)求都不是我們所需要的,但他們都擠在了左側(cè)這個(gè)本來就不大的列表中,顯然我們只需要特定域名下的數(shù)據(jù),那么我們就需要過濾一下。在Charles的設(shè)置中有一個(gè)Recording選項(xiàng),用于記錄攔截到的所有的請(qǐng)求,默認(rèn)是將所有攔截到的請(qǐng)求都記錄在了左側(cè)列表中,我們可以設(shè)置進(jìn)行過濾,只要我們特定的請(qǐng)求:

在
include中添加Add,在跳出的界面上填上相應(yīng)的Host、Port,如果有需要還可以添加Path、Query,圖為我添加的開源中國的地址

這是我過濾后的列表界面,可以看到只有開源中國的數(shù)據(jù),其他的就不顯示了:

模擬慢網(wǎng)
還是看圖吧:


想要多慢,自己調(diào)吧。
斷點(diǎn)
Charles還有一個(gè)很強(qiáng)大的功能,就是斷點(diǎn)調(diào)試,可以在網(wǎng)絡(luò)請(qǐng)求發(fā)出前和返回后進(jìn)行攔截,查看、編輯發(fā)出請(qǐng)求和返回的參數(shù),這樣與后臺(tái)調(diào)試時(shí)就特別方面,傳遞的參數(shù)有什么問題,或者后臺(tái)返回的數(shù)據(jù)有問題,一清二楚,誰也賴不了賬:
-
首先對(duì)想要攔截的地址先發(fā)一次請(qǐng)求,然后在該地址上右鍵,選則
Breakpoints,然后清空左側(cè)列表,重新發(fā)送請(qǐng)求,該請(qǐng)求過來時(shí)就能攔截到了:
選中相應(yīng)地址.png -
Edit Request對(duì)請(qǐng)求進(jìn)行編輯
攔截請(qǐng)求.png
- 修改請(qǐng)求中操作的空間就很大,這是很強(qiáng)大的地方,可以修改、增加參數(shù),修改地址、
header等,修改完成后點(diǎn)擊Excute執(zhí)行:
修改請(qǐng)求.png
當(dāng)網(wǎng)絡(luò)返回?cái)?shù)據(jù)后也是一樣的道理,可以對(duì)返回的數(shù)據(jù)進(jìn)行修改,不再贅述。
網(wǎng)絡(luò)請(qǐng)求重發(fā)
我們?cè)诤秃笈_(tái)調(diào)試接口的時(shí)候,很多情況下都會(huì)需要調(diào)用同一個(gè)接口多次,如果我們?cè)谑謾C(jī)界面上去觸發(fā),特別是層級(jí)較深時(shí)會(huì)浪費(fèi)很多時(shí)間,效率很低,但Charles強(qiáng)大的網(wǎng)絡(luò)重發(fā)就幫我們解決了這個(gè)問題,在需要發(fā)送的地址上右鍵,點(diǎn)擊Repeat就可以直接發(fā)送請(qǐng)求,而且參數(shù)都是一樣的。

其它
再寫兩個(gè)功能,請(qǐng)求重定向和內(nèi)容替換:
- 重定向:可以重定向網(wǎng)絡(luò)請(qǐng)求
- 內(nèi)容替換:可以替換后臺(tái)返回的數(shù)據(jù),這樣可以修改后臺(tái)返回的數(shù)據(jù)來達(dá)到測(cè)試我們
app的異常處理等,不細(xì)說,有需要的可以取研究:

Charles是一個(gè)很強(qiáng)大的工具,寫了這么多,也只是冰山一角,且學(xué)且珍惜吧。
PS:這個(gè)圖確實(shí)有點(diǎn)多昂...












