Charles使用指南

Charles使用指南

[TOC]

① Charles簡(jiǎn)介

Charles 是在 Mac 下常用的網(wǎng)絡(luò)封包截取工具,在做移動(dòng)開(kāi)發(fā)時(shí),我們?yōu)榱苏{(diào)試與服務(wù)器端的網(wǎng)絡(luò)通訊協(xié)議,常常需要截取網(wǎng)絡(luò)封包來(lái)分析。Charles 通過(guò)將自己設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問(wèn)代理服務(wù)器,使得所有的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求都通過(guò)它來(lái)完成,從而實(shí)現(xiàn)了網(wǎng)絡(luò)封包的截取和分析。除了在做移動(dòng)開(kāi)發(fā)中調(diào)試端口外,Charles 也可以用于分析第三方應(yīng)用的通訊協(xié)議。配合 Charles 的 SSL 功能,Charles 還可以分析 Https 協(xié)議。

  • Charles 主要的功能包括:
  1. 截取 Http 和 Https 網(wǎng)絡(luò)封包。
  2. 支持重發(fā)網(wǎng)絡(luò)請(qǐng)求,方便后端調(diào)試。
  3. 支持修改網(wǎng)絡(luò)請(qǐng)求參數(shù)。
  4. 支持網(wǎng)絡(luò)請(qǐng)求的截獲并動(dòng)態(tài)修改。
  5. 支持模擬慢速網(wǎng)絡(luò)。

② 將 Charles 設(shè)置成系統(tǒng)代理

Charles 是通過(guò)將自己設(shè)置成代理服務(wù)器來(lái)完成封包截取的,所以使用 Charles 的第一步是將其設(shè)置成系統(tǒng)的代理服務(wù)器。第一次啟動(dòng)Charles會(huì)請(qǐng)求你給它設(shè)置系統(tǒng)代理的權(quán)限。你可以輸入登錄密碼授予 Charles 該權(quán)限。你也可以忽略該請(qǐng)求,然后在需要將 Charles 設(shè)置成系統(tǒng)代理時(shí),選擇菜單中的 “Proxy” -> “Mac OS X Proxy” 來(lái)將 Charles 設(shè)置成系統(tǒng)代理。

  • 為什么要設(shè)置系統(tǒng)代理?
  • Charles不僅僅用戶手機(jī)抓包也可用于本機(jī)電腦抓包,設(shè)置成系統(tǒng)代理才會(huì)對(duì)本機(jī)所發(fā)送的網(wǎng)絡(luò)請(qǐng)求達(dá)到截取的目的
Charles 設(shè)置成系統(tǒng)代理

③ 電腦設(shè)置Https證書(shū)

如果不進(jìn)行https證書(shū)的設(shè)置,https的reqeust和response都是亂碼,設(shè)置完之后https就可以正常解密愉快的玩耍。

第一步:安裝證書(shū)到系統(tǒng)(windows同理):

點(diǎn)擊Charles菜單的help->SSL->proxying->install charles root certificate

mac電腦安裝信賴證書(shū)

第二步:在到電腦的鑰匙串中信賴剛剛的證書(shū):

mac電腦安裝信賴證書(shū)
第三步:設(shè)置解密host:

1、在Charles的工具欄上點(diǎn)擊設(shè)置按鈕,選擇Proxy Settings…

切換到SSL選項(xiàng)卡,選中Enable SSL Proxying。

2、SSL選項(xiàng)卡的Locations里填寫(xiě)要抓包的域名和端口,點(diǎn)擊Add按鈕,在彈出的表單中Host填寫(xiě)域名。比如填api.baidu.com,Port填443

mac端ssl設(shè)置

④ 手機(jī)設(shè)置代理

設(shè)置Charles代理

1、運(yùn)行Charles程序,設(shè)置port
Proxy --> ProxySettings --> Proxies --> httpProxy



獲取mac os當(dāng)前ip

按住option鍵,點(diǎn)擊右上角的wifi圖標(biāo)即可看到IP:


獲取當(dāng)前ip地址
或者在Charles中點(diǎn)擊菜單:
image.png

⑤ 移動(dòng)設(shè)備設(shè)置代理

打開(kāi)iOS設(shè)置,進(jìn)入當(dāng)前wifi連接,設(shè)置HTTP代理,將服務(wù)器填為上一步中獲得的IP,即192.168.199.147,端口填8888:(安卓原理相同)



<b>安卓因機(jī)型操作系統(tǒng)的不同,大致原理都相同。
注意:在不使用的時(shí)候需要將手機(jī)中得HTTP代理關(guān)閉,否則pc或者mac關(guān)機(jī)或者關(guān)閉軟件后,手機(jī)無(wú)法正常上網(wǎng)!</b>


⑥ 移動(dòng)設(shè)備安裝https證書(shū)

安裝證書(shū)的前提都是要先在移動(dòng)設(shè)備上設(shè)置好代理

* ios安裝證書(shū)

第一步:下載安裝證書(shū)

ios相對(duì)比較簡(jiǎn)單,使用系統(tǒng)瀏覽器safari,輸入地址:chls.pro/ssl,就會(huì)彈出描述文件安裝彈層。按照提示安裝描述文件即可
很多小伙伴在設(shè)置好代理,裝好證書(shū)之后依然會(huì)出現(xiàn)https請(qǐng)求無(wú)法解包的情況!經(jīng)過(guò)一段時(shí)間研究,找資料發(fā)現(xiàn)原來(lái)僅僅只是需要一個(gè)小設(shè)置即可!

設(shè)置-通用-關(guān)于本機(jī)-證書(shū)信任設(shè)置 , 打開(kāi)相應(yīng)證書(shū)的開(kāi)關(guān)即可

證書(shū)信任設(shè)置
打開(kāi)對(duì)應(yīng)證書(shū)開(kāi)關(guān)
打開(kāi)對(duì)應(yīng)證書(shū)開(kāi)關(guān)
android安裝證書(shū)

對(duì)于大部分安卓機(jī)型都可以使用相同的方法,系統(tǒng)瀏覽器輸入地址:chls.pro/ssl,就會(huì)彈出安裝證書(shū)的彈層安裝即可
對(duì)于部分機(jī)型直接輸入地址后下載的文件無(wú)法解析安裝證書(shū),可將Charles證書(shū)保存到本地,然后導(dǎo)入到安卓手機(jī)

安卓手機(jī)如何信任證書(shū)?

通用設(shè)置基本上都為:安全和隱私設(shè)置-更多安全設(shè)置-從sd卡安裝證書(shū)即可


⑦ 過(guò)濾網(wǎng)絡(luò)請(qǐng)求

通常情況下在抓包的時(shí)候,你可能只想關(guān)注一部分指定的域名所發(fā)送的網(wǎng)絡(luò)請(qǐng)求,但是其他的請(qǐng)求總是那么多,那么下面就介紹兩種方法來(lái)實(shí)現(xiàn)!

方法一:通過(guò)設(shè)置Recording Settings

Charles菜單選擇“Proxy”->”Recording Settings” 選擇Include 標(biāo)簽然后選擇添加一個(gè)項(xiàng)目,然后填入需要監(jiān)控的協(xié)議,主機(jī)地址,端口號(hào)。
1、Protocol:不選擇則不區(qū)分http和https
2、Host:可以設(shè)置泛域名,如 *.baidu.com
3、Port:可以不設(shè)置
4、Path:根據(jù)需求在需要只監(jiān)控部分接口時(shí)使用
5、Query:根據(jù)需求在需要只監(jiān)控部分接口時(shí)使用


Recording Settings
方法二:右鍵菜單Focus

這個(gè)方法比較簡(jiǎn)單快捷,在一些臨時(shí)情況下可以很快進(jìn)行過(guò)濾,比較方便,方法則是:在想過(guò)濾的網(wǎng)絡(luò)請(qǐng)求上右擊,選擇 “Focus”


Focus

PS:有很多小伙伴在Focus之后就忘記了哪些Focus過(guò),以至于Charles顯示出來(lái)的過(guò)濾的請(qǐng)求比較雜!在菜單 “View->FocusedHosts...”中進(jìn)行管理Focus過(guò)的域名


FocusedHosts...

⑧.模擬網(wǎng)絡(luò)

不管是在做app開(kāi)發(fā)還是app測(cè)試的時(shí)候,模擬慢速網(wǎng)絡(luò)或者高延遲的網(wǎng)絡(luò)看應(yīng)用的表現(xiàn)是否正常都是必要的,可以通過(guò)以下設(shè)置進(jìn)行操作:“Proxy”->”Throttle Setting”勾選上 “Enable Throttling”,并且可以設(shè)置 Throttle Preset 的類型。

Throttle Setting

如果我們只想模擬指定網(wǎng)站的慢速網(wǎng)絡(luò),可以再勾選上圖中的 “Only for selected hosts” 項(xiàng),然后在對(duì)話框的下半部分設(shè)置中增加指定的 hosts 項(xiàng)即可。

Enable Throttling

⑨.編輯網(wǎng)絡(luò)請(qǐng)求

有時(shí)候在調(diào)試或者測(cè)試的時(shí)候需要反復(fù)不斷的嘗試不同的參數(shù)來(lái)調(diào)用接口,Charles 可以方便地提供網(wǎng)絡(luò)請(qǐng)求的修改和重發(fā)功能,只需要編輯一下,進(jìn)行修改之后執(zhí)行即可,如下Gif演示

compose

⑩.修改服務(wù)器返回內(nèi)容

常常有時(shí)候需要模擬一些數(shù)據(jù)異常的情況,通過(guò)Charles對(duì)返回值進(jìn)行修改,那么在進(jìn)行測(cè)試的時(shí)候必然會(huì)事半功倍,不會(huì)受到后端程序和數(shù)據(jù)的禁錮!Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達(dá)到修改服務(wù)器返回內(nèi)容的目的。

1、Map 功能適合長(zhǎng)期地將某一些請(qǐng)求重定向到另一個(gè)網(wǎng)絡(luò)地址或本地文件。

2、Rewrite 功能適合對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行一些正則替換。

3、Breakpoints 功能適合做一些臨時(shí)性的修改。

1、Map

Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,Map Remote 是將指定的網(wǎng)絡(luò)請(qǐng)求重定向到另一個(gè)網(wǎng)址請(qǐng)求地址,Map Local 是將指定的網(wǎng)絡(luò)請(qǐng)求重定向到本地文件

Map Remote

可以通過(guò)Map Remote+moke數(shù)據(jù)來(lái)實(shí)現(xiàn):

Map Remote

對(duì)于Map Local,通俗來(lái)講可以將一個(gè)接口的返回值通過(guò)Charles指向一個(gè)本地文件,本地文件中可以變成任何你想讓接口返回的數(shù)據(jù)。比如本地當(dāng)前保存過(guò)一個(gè)response文件(返回值文件,可以通過(guò)右鍵"save response"進(jìn)行保存)

Map Local

Map Local 在使用的時(shí)候,有一個(gè)潛在的問(wèn)題,如果客戶端校驗(yàn)了 Http Response Header 中的部分內(nèi)容,就會(huì)使得該功能失效。解決辦法是下面提到的 Rewrite 功能

2、Rewrite

Rewrite功能十分強(qiáng)大,在用的時(shí)候簡(jiǎn)直是事半功倍,打個(gè)比方:App已經(jīng)做好了,但是接口這時(shí)候增加了一個(gè)參數(shù),但是App本身是沒(méi)問(wèn)題的,App的人已經(jīng)下班了,需要你驗(yàn)證一下這個(gè)接口發(fā)上去會(huì)不會(huì)影響到App,這時(shí)候就可以用rewrite了,通過(guò)重寫(xiě)接口請(qǐng)求,后把數(shù)據(jù)給App來(lái)查看app情況再合適不過(guò)了。好用到不能在好用。

舉個(gè)栗子:

當(dāng)前接口返回了一個(gè)分類叫“潮品”,這時(shí)候我想改成別的,比如“優(yōu)雅的豬”。

1、首先進(jìn)入rewrite菜單“Tools->Rewrite”

rewrite

2、首先要打開(kāi)rewrite功能,勾選"enable rewrite"你會(huì)看到左邊的菜單下面有個(gè)“ad

d”,點(diǎn)擊添加一條rewrite規(guī)則

rewrite

3、設(shè)置location,要告訴Charles你要修改哪個(gè)

location

4、設(shè)置修改規(guī)則,Charles提供了多種類型的修改規(guī)則

Add Header:請(qǐng)求中增加請(qǐng)求頭

Modify Header:修改請(qǐng)求頭

Remove Header:刪除請(qǐng)求頭

Host:修改指向

Path:修改路徑

URL:修改請(qǐng)求地址

Add Query Param:增加請(qǐng)求參數(shù)(GET接口)

Modify Query Param:修改請(qǐng)求參數(shù)(GET接口)

Remove Query Param:刪除請(qǐng)求參數(shù)(GET接口)

Response Status:修改返回值的HTTP狀態(tài)值,如:404

Body:修改返回值的詳細(xì)內(nèi)容(POST接口)

Rewrite

設(shè)置好之后,可以replay一下請(qǐng)求,也可以用調(diào)用接口的app再試一下

Rewrite

3、Breakpoints

Breakpoints 功能類似我們?cè)谠O(shè)置的斷點(diǎn)一樣,以下一張Gif能說(shuō)明,如果看不懂,那就多看幾遍、

Breakpoints

需要注意的是,使用 Breakpoints 功能將網(wǎng)絡(luò)請(qǐng)求截獲并修改過(guò)程中,整個(gè)網(wǎng)絡(luò)請(qǐng)求的計(jì)時(shí)并不會(huì)暫停,所以長(zhǎng)時(shí)間的暫??赡軐?dǎo)致客戶端的請(qǐng)求超時(shí)。


關(guān)于和"代理"共存

在實(shí)際的使用當(dāng)中,大部分人為了一些資料的查詢,通常是要guge一下的。
但是大部分的"代理"軟件和charles的原理都是一樣的,通過(guò)設(shè)置系統(tǒng)代理,所以,就出現(xiàn)了用charles就不能"代理"的現(xiàn)狀。
找了一部分資料,發(fā)現(xiàn)通過(guò)charles設(shè)置外部代理就可以解決這個(gè)問(wèn)題
首先你要知道你的"代理"HTTP代理的端口是多少,在你"代理"軟件的設(shè)置里


duo

進(jìn)入charles菜單:proxy → External Proxy Settings...


image.png

勾選 use external proxy server
并且分別設(shè)置好http和https的ip和端口
端口即為:你"代理"軟件里的端口
ip則為:你本地ip 127.0.0.1
image.png

設(shè)置完成,手機(jī)掛charles代理后,你會(huì)發(fā)現(xiàn)手機(jī)網(wǎng)絡(luò)也可以實(shí)現(xiàn)google內(nèi)容

其實(shí)原理即為:
讓請(qǐng)求先通過(guò)charles,charles再轉(zhuǎn)發(fā)給"代理"。指定http(s)代理端口為charles,charles設(shè)置外部代理為"代理"。最終訪問(wèn)網(wǎng)絡(luò)的是"代理"后的網(wǎng)絡(luò),charles即作為前置代理。

end.解惑

  • 問(wèn):為什么我設(shè)置完代理之后就不能上網(wǎng)了?chales里面也沒(méi)有請(qǐng)求?

  • 答:看看代理ip設(shè)置的對(duì)不對(duì),電腦防火墻等等關(guān)閉沒(méi)有!如果設(shè)置的沒(méi)有問(wèn)題的話,就再進(jìn)入Charles菜單
    Proxy-Access Control Settings 增加你移動(dòng)設(shè)備ip即可

  • 問(wèn):為什么我抓包https都是小鎖,看不到內(nèi)容?

  • 答:需要在設(shè)置https解密了,上文提到的第③部分

  • 問(wèn):為什么我抓包的https都是紅色的unknown?

  • 答:明顯就是https證書(shū)的問(wèn)題了,要檢查電腦證書(shū)有沒(méi)有安裝信任,手機(jī)證書(shū)有沒(méi)有安裝信任,沒(méi)有沒(méi)有設(shè)置https解密

  • 問(wèn):我自己手機(jī)能抓包,為什么這個(gè)手機(jī)不能抓包?

  • 答:每一臺(tái)移動(dòng)設(shè)備都需要重新安裝你電腦Charles頒發(fā)的https證書(shū),也就是說(shuō)每臺(tái)手機(jī)你只要想看,那么就要裝證書(shū)

  • 問(wèn):不裝https證書(shū)行不行?

  • 答:當(dāng)然行!正常的http請(qǐng)求都是沒(méi)問(wèn)題的,只是看不到具體https的請(qǐng)求內(nèi)容罷了,隨意

  • 問(wèn):怎么抓電腦的包?

  • 答:charles默認(rèn)就是可以抓電腦包的,設(shè)置了系統(tǒng)代理之后需要關(guān)注的就是,關(guān)閉其他"代理"軟件即可

  • 問(wèn):從哪能搞到到破解版Charles?

  • 答:請(qǐng)支持正版軟件,抵制不良破解軟件


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容