說(shuō)明 | |
---|---|
首次發(fā)布 | 2019年03月03日 |
最近更新 | 2019年03月18日 |
前言:公司安排的分享會(huì)馬上就到我了次和,于是就再次整理了一下Charles的使用并更新了一下這篇文章豌注。無(wú)論你是iOS開(kāi)發(fā)者累提、Android開(kāi)發(fā)者還是前端開(kāi)發(fā)者兼耀,Charles都是一個(gè)不可多得的利器。但想要把這個(gè)利器的功能發(fā)揮到極致炕倘,還需要我們不斷的去摸索。結(jié)合過(guò)往的使用經(jīng)驗(yàn)翰撑,我將系統(tǒng)的總結(jié)一下并分享出來(lái)罩旋,希望對(duì)你在開(kāi)發(fā)中的調(diào)試有所幫助啊央。
環(huán)境:Charles V4.2.1
一、Map Local: 將指定的網(wǎng)絡(luò)請(qǐng)求重定向到本地文件涨醋。
之所以首推這個(gè)功能瓜饥,是因?yàn)槲覀兛梢噪S心所欲的讓指定接口返回我們想要的內(nèi)容,這樣就可以在不借助測(cè)試給配數(shù)據(jù)的情況下浴骂,完成我們的調(diào)試乓土。
1、選中接口溯警,右鍵選擇Save Response
趣苏,然后保存為.json
格式。
2梯轻、將json編輯為我們期望的數(shù)據(jù)食磕,然后選中接口,右鍵選擇Map Local
喳挑。
3彬伦、編輯map的本地路徑。
4伊诵、如果想取消本地映射单绑,可以在偏好里選擇是取消所有的map local,還是指定接口的曹宴。
5搂橙、在接口未開(kāi)發(fā)的情況下,我們?nèi)匀豢梢詣?chuàng)建一個(gè)json文件浙炼,然后執(zhí)行步驟三份氧,去模擬接口請(qǐng)求。
6弯屈、目前蜗帜,我測(cè)試的Query
參數(shù),只對(duì)GET
請(qǐng)求有效资厉,特此說(shuō)明厅缺。Query參數(shù)可以限制只對(duì)傳遞指定參數(shù)的請(qǐng)求做本地映射處理。
二宴偿、Map Remote:更換遠(yuǎn)程接口地址湘捎,使用場(chǎng)景一般是,在不重新運(yùn)行程序的情況下窄刘,將測(cè)試環(huán)境地址手動(dòng)更改為生產(chǎn)環(huán)境等窥妇。
1、選中接口地址娩践,右鍵“Map Remote”
2活翩、編輯想要替換的地址烹骨,保存即可。
3材泄、同樣沮焕,如果想取消遠(yuǎn)程映射,可以在偏好里選擇是取消所有的map remote拉宗,還是指定接口的峦树。
三、修改網(wǎng)絡(luò)請(qǐng)求:在與后臺(tái)進(jìn)行聯(lián)調(diào)的時(shí)候旦事,可能需要給后臺(tái)傳遞不同的參數(shù)魁巩,但調(diào)試的入口又比較深,這時(shí)候Charles的“編輯請(qǐng)求”的功能就可以大顯身手了族檬。比如說(shuō)歪赢,模擬登錄,踢掉用戶等等单料。
1埋凯、選中接口,然后選中鋼筆(Compose)
2扫尖、可以任意編輯請(qǐng)求頭白对、請(qǐng)求參數(shù),然后可以選擇執(zhí)行换怖、恢復(fù)更改和取消甩恼。
四、模擬網(wǎng)速:App測(cè)試時(shí)一般都是用的公司的網(wǎng)絡(luò)沉颂,速度還可以条摸,如果想模擬網(wǎng)絡(luò)環(huán)境非常差的情況下,會(huì)出現(xiàn)什么情況铸屉, Charles 也提供了對(duì)應(yīng)的支持钉蒲,來(lái)模擬低速網(wǎng)絡(luò)環(huán)境。
1彻坛、進(jìn)入Throttle設(shè)置
2顷啼、選擇需要模擬的網(wǎng)絡(luò)環(huán)境
3、可以通過(guò)點(diǎn)擊面板上的小烏龜昌屉,來(lái)快捷的開(kāi)關(guān)模擬網(wǎng)速
钙蒙。
五、斷點(diǎn)調(diào)試
1间驮、對(duì)要調(diào)試的接口打斷點(diǎn)躬厌,并開(kāi)啟斷點(diǎn)調(diào)試,如下圖所示竞帽。
2烤咧、當(dāng)請(qǐng)求調(diào)試的接口時(shí)偏陪,Charles會(huì)先跳到編輯請(qǐng)求
,點(diǎn)擊執(zhí)行后煮嫌,會(huì)跳到響應(yīng)的編輯頁(yè)面。我們?cè)谶@里抱虐,可以對(duì)返回的結(jié)果進(jìn)行編輯昌阿。
需要特別注意的是:如果timeoutInterval設(shè)置的時(shí)間過(guò)短,可能會(huì)造成在沒(méi)有編輯完就超時(shí)的情況恳邀,建議如果編輯需要時(shí)間過(guò)長(zhǎng)懦冰,我們就把timeoutInterval設(shè)置的足夠長(zhǎng)些。
六谣沸、連續(xù)多次請(qǐng)求
七刷钢、專注模式
像下圖一樣,把我們不關(guān)心的請(qǐng)求歸到另一個(gè)文件夾里乳附。
操作方法:
八内地、Find in: 在ULR、Header赋除、RequestBody阱缓、ResponseHeader或ResponseBody里搜索字符串,正如你看到的举农,還支持正則表達(dá)式的搜索荆针。
拓展
原理簡(jiǎn)析
如果是HTTP請(qǐng)求,因?yàn)閿?shù)據(jù)本身并沒(méi)加密所以請(qǐng)求內(nèi)容和返回結(jié)果是直接展現(xiàn)出來(lái)的颁糟。
-
但HTTPS是對(duì)數(shù)據(jù)進(jìn)行了加密處理的航背,如果不做任何應(yīng)對(duì)是無(wú)法獲取其中內(nèi)容。所以Charles做的就是對(duì)客戶端把自己偽裝成服務(wù)器棱貌,對(duì)服務(wù)器把自己偽裝成客戶端:
- Charles攔截客戶端的請(qǐng)求玖媚,偽裝成客戶端向服務(wù)器進(jìn)行請(qǐng)求;
- 服務(wù)器向“客戶端”(實(shí)際上是Charles)返回服務(wù)器的CA證書键畴;
- Charles攔截服務(wù)器的響應(yīng)最盅,獲取服務(wù)器證書公鑰,然后自己制作一張證書起惕,將服務(wù)器證書替換后發(fā)送給客戶端涡贱。(這一步,Charles拿到了服務(wù)器證書的公鑰)惹想;
- 客戶端接收到“服務(wù)器”(實(shí)際上是Charles)的證書后问词,生成一個(gè)對(duì)稱密鑰,用Charles的公鑰加密嘀粱,發(fā)送給“服務(wù)器”(Charles)激挪;
- Charles攔截客戶端的響應(yīng)辰狡,用自己的私鑰解密對(duì)稱密鑰,然后用服務(wù)器證書公鑰加密垄分,發(fā)送給服務(wù)器宛篇。(這一步,Charles拿到了對(duì)稱密鑰)薄湿;
- 服務(wù)器用自己的私鑰解密對(duì)稱密鑰叫倍,向“客戶端”(Charles)發(fā)送響應(yīng);
- Charles攔截服務(wù)器的響應(yīng)豺瘤,替換成自己的證書后發(fā)送給客戶端吆倦;
當(dāng)然,如果 用戶不選擇信任安裝Charles的CA證書坐求,Charles也無(wú)法獲取請(qǐng)求內(nèi)容蚕泽。還有一種,如果 客戶端內(nèi)置了本身的CA證書桥嗤,這時(shí)如果Charles把自己的證書發(fā)送給客戶端须妻,客戶端會(huì)發(fā)現(xiàn)與程序內(nèi)的證書不一致,不予通過(guò)砸逊,此時(shí)Charles也是無(wú)法獲取信息的璧南。
其他屌屌的工具推薦
模擬后臺(tái)返回?cái)?shù)據(jù)網(wǎng)址
JSON數(shù)據(jù)格式化網(wǎng)址