在App開發(fā)與后臺(tái)聯(lián)調(diào)過(guò)程中,經(jīng)常會(huì)遇到后臺(tái)數(shù)據(jù)返回不全谈火,請(qǐng)求參數(shù)需要修改侈询,請(qǐng)求需要重發(fā)等情況舌涨。
如果每次都在app端修改糯耍,或者自己造數(shù)據(jù),會(huì)增加工作量囊嘉,而且每次要重新運(yùn)行app温技,浪費(fèi)時(shí)間。
因此扭粱,經(jīng)過(guò)研究舵鳞,可以使用抓包工具charles,對(duì)app進(jìn)行抓包琢蛤,請(qǐng)求斷點(diǎn)蜓堕,修改請(qǐng)求與返回的數(shù)據(jù),重新發(fā)送請(qǐng)求博其。
簡(jiǎn)單的抓包流程與charels設(shè)置這里不做過(guò)多介紹套才,這里舉例子使用的是charles4.1.
首先看,主要的按鈕介紹:
①重新發(fā)送指定請(qǐng)求:
在發(fā)送一次請(qǐng)求后慕淡,在左邊列表選中該請(qǐng)求背伴,點(diǎn)擊如上圖所示重新發(fā)送按鈕即可模擬請(qǐng)求。
②請(qǐng)求斷點(diǎn):
點(diǎn)擊如上圖請(qǐng)求斷點(diǎn)按鈕峰髓,開啟請(qǐng)求斷點(diǎn)傻寂。進(jìn)行過(guò)網(wǎng)絡(luò)請(qǐng)求后,選中該請(qǐng)求携兵,右鍵疾掰,點(diǎn)擊breakPoint,設(shè)置該請(qǐng)求的斷點(diǎn)徐紧。
斷點(diǎn)設(shè)置成功静檬,頁(yè)面處于loading狀態(tài)
然后再進(jìn)行一次該地址的請(qǐng)求勒葱,便可在斷點(diǎn)處修改請(qǐng)求參數(shù)與返回的參數(shù)。
第三步巴柿,點(diǎn)擊Execute后凛虽,等數(shù)據(jù)返回進(jìn)行修改response的數(shù)據(jù),再次點(diǎn)擊Execute广恢,即可實(shí)現(xiàn)篡改返回?cái)?shù)據(jù)來(lái)進(jìn)行app的測(cè)試凯旋,eg:修改訂單狀態(tài)等。
轉(zhuǎn)手機(jī)的包的步驟:
如果是使用charles抓包钉迷。一定要tm的保證手機(jī)和電腦連的是一個(gè)網(wǎng)至非。
1、proxy setting糠聪,查看Charles荒椭,端口
2, 勾選
3、ipconfig舰蟆,查看自己電腦的ip地址
4趣惠、手機(jī)通過(guò)設(shè)置http代理服務(wù)器,連接到電腦服務(wù)器輸入電腦的ip端口和charles的端口一致身害,
5味悄、此時(shí)charles會(huì)給出提示。有新的連接塌鸯。點(diǎn)擊allow
6侍瑟、連接成功,此時(shí)手機(jī)發(fā)送的內(nèi)容丙猬,charles可以抓到涨颜。
Charles安裝和抓包及報(bào)錯(cuò)
1.charles安裝
下載charles4.0.1破解版,官方下載只能試用30天茧球。網(wǎng)盤下載地址:https://pan.baidu.com/s/1eSwwvo2庭瑰。(里面包括.dmg(用于安裝)和.jar文件(用于破解))破解方法:在Finder的應(yīng)用程序中找到Charles.app,右鍵選擇“顯示包內(nèi)容”袜腥,之后進(jìn)入Contents文件夾见擦,接著進(jìn)入Java文件夾,用破解文件(也就是jar文件)替換charles.jar文件羹令。到此就破解了鲤屡。
2.安裝證書如果你需要截取分析 Https 協(xié)議相關(guān)的內(nèi)容。那么需要安裝 Charles 的 CA 證書福侈。具體步驟如下酒来。我們需要在 Mac 電腦上安裝證書。點(diǎn)擊 Charles 的頂部菜單肪凛,選擇 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”堰汉,然后輸入系統(tǒng)的帳號(hào)密碼辽社,即可在 KeyChain 看到添加好的證書。(如果證書是不信任的那就設(shè)置為信任)如下圖:
雙擊Charles證書:
選擇始終信任:
3.設(shè)置charles要截取 iPhone 上的網(wǎng)絡(luò)請(qǐng)求翘鸭,我們首先需要將 Charles 的代理功能打開滴铅。在 Charles 的菜單欄上選擇 “Proxy”–>“Proxy Settings”,填入代理端口 8888就乓,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的設(shè)置汉匙。如下圖:
填入的端口號(hào)和 Charles中的Proxy Settings,一樣
4.iPhone上面的設(shè)置生蚁。
首先我們需要獲取 Charles 運(yùn)行所在電腦的 IP 地址噩翠,Charles 的頂部菜單的 “Help”–>“Local IP Address”,即可在彈出的對(duì)話框中看到 IP 地址邦投,如下圖:在 iPhone 的 “ 設(shè)置 ”–>“ 無(wú)線局域網(wǎng) ” 中伤锚,可以看到當(dāng)前連接的 wifi 名,通過(guò)點(diǎn)擊右邊的詳情鍵志衣,可以看到當(dāng)前連接上的 wifi 的詳細(xì)信息屯援,包括 IP 地址,子網(wǎng)掩碼等信息蠢涝。在其最底部有“HTTP 代理”一項(xiàng)玄呛,我們將其切換成手動(dòng),然后填上 Charles 運(yùn)行所在的電腦的 IP和二,以及端口號(hào) 8888(若此時(shí)設(shè)置代理無(wú)效,則先忽略此網(wǎng)絡(luò)耳胎,重新連接后再設(shè)置代理即可)惯吕。如下圖:
5.安裝手機(jī)證書
如果我們需要在 iOS 或 Android 機(jī)器上截取 Https 協(xié)議的通訊內(nèi)容,還需要在手機(jī)上安裝相應(yīng)的證書怕午。點(diǎn)擊 Charles 的頂部菜單废登,選擇 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 彈出的簡(jiǎn)單的安裝教程郁惜。
注意:這邊的fe80:0:0:0:aebc:32 這是ipv6的地址
在手機(jī)safari上面輸入:chls.pro/ssl,安裝文件堡距。
通常這樣就可以進(jìn)行網(wǎng)絡(luò)抓包了。但是這只是僅僅針對(duì)http請(qǐng)求兆蕉。如果要抓取https請(qǐng)求羽戒,則還需要做第6步。我們先來(lái)看看沒有做第6步的情況虎韵。對(duì)一個(gè)接口打上Breakpoints易稠。在進(jìn)行網(wǎng)絡(luò)截取的時(shí)候會(huì)發(fā)現(xiàn)一直報(bào)錯(cuò)。
報(bào)Failed to parse headers:EOF reading HTTP headers,原因是不能截取https的網(wǎng)絡(luò)請(qǐng)求包蓝。
加上第6步即可驶社。此時(shí)如果碰到抓取到的https請(qǐng)求接口一直顯示紅色X<unknown>,則需要進(jìn)行如下操作:設(shè)置->通用->關(guān)于本機(jī)->證書信任設(shè)置->針對(duì)根證書啟用完全信任下的Charles Proxy CA開關(guān)打開企量。
6.勾選https的截取功能
Charles 默認(rèn)也并不截取 Https 網(wǎng)絡(luò)通訊的信息,如果你想對(duì)截取某個(gè)網(wǎng)站上的所有 HTTPS 網(wǎng)絡(luò)請(qǐng)求亡电,可以在該請(qǐng)求上右擊届巩,選擇 SSL proxy,如下圖:
這樣份乒,對(duì)于該 Host 的所有 SSL 請(qǐng)求可以被截取到了姆泻。當(dāng)截取到網(wǎng)絡(luò)請(qǐng)求紅色箭頭向下的時(shí)候即可改變網(wǎng)絡(luò)接口返回的內(nèi)容。比如此時(shí)可以將code碼改為000001冒嫡,data內(nèi)容也可以做修改拇勃。
Charles模擬網(wǎng)絡(luò)環(huán)境,限制網(wǎng)絡(luò)速度 Charles Throtting
開啟限制網(wǎng)絡(luò)孝凌,直接在烏龜上操作方咆,烏龜
亮了,表示開啟了限制網(wǎng)絡(luò)
Charles mock假數(shù)據(jù)
前端開發(fā)經(jīng)常遇到自己邏輯寫完了但是接口還沒寫好蟀架,還得等著接口瓣赂,這時(shí)候就可以自己去造點(diǎn)假數(shù)據(jù)了。
一般后端先寫完接口文檔和前端定好數(shù)據(jù)結(jié)構(gòu)才去寫接口邏輯片拍,
而在后端接口邏輯寫完之前前端可能已經(jīng)把前端的邏輯寫好了煌集,
需要相應(yīng)的數(shù)據(jù)去鋪?lái)?yè)面,這時(shí)候我們就可以用Charles的mock功能在本地去模擬一些返回?cái)?shù)據(jù)
實(shí)戰(zhàn)經(jīng)驗(yàn):
IOS中實(shí)驗(yàn)捌省,要以.json 結(jié)尾來(lái)處理苫纤,以.txt 結(jié)尾的不行
配置如下:
1首先保證手機(jī)和pc在同一網(wǎng)絡(luò)環(huán)境下
2手機(jī)添加代理,主機(jī)名:pc的ip,端口:charles配置的端口號(hào)纲缓,我一般為8888
3在charles中右鍵某個(gè)要添加的接口選擇最下面的Map Local卷拘,情況Query那行,然后選擇本地json文件就可以了
android設(shè)置代理
操作路徑:設(shè)置-->WLAN祝高,選中網(wǎng)絡(luò)長(zhǎng)按(不同設(shè)備操作方式不一樣栗弟,有些事點(diǎn)擊更多按鈕)-->修改網(wǎng)絡(luò)-->高級(jí)選項(xiàng),將代理選項(xiàng)設(shè)置為手動(dòng)工闺,在代理服務(wù)器主機(jī)名處填寫你要設(shè)置的代理服務(wù)器IP乍赫,端口填寫對(duì)應(yīng)的端口(如Fiddler為8888),設(shè)置完畢后點(diǎn)擊保存即可
通常情況下用第一種方式即可完成代理設(shè)置陆蟆,不過(guò)有些android設(shè)備比較奇葩沒法通過(guò)上述方法設(shè)置或找不到設(shè)置入口的情況下也可以通過(guò)adb指令的方式設(shè)置代理
設(shè)置代理的時(shí)候雷厂,一定要勾選高級(jí)選項(xiàng),否則看不到設(shè)置代理的地方遍搞,如圖上邊的綠色勾選
當(dāng)網(wǎng)絡(luò)設(shè)置了vpn罗侯,用charles抓包,走的是android模擬器溪猿,操作模擬器钩杰,抓不到網(wǎng)絡(luò)的鏈接纫塌,是因?yàn)榫W(wǎng)絡(luò)沒有給模擬器設(shè)置代理
如何為android模擬器設(shè)置代理
這邊,然后退出模擬器讲弄,打開charles就可以監(jiān)聽到抓到模擬器的接口了
當(dāng)你的電腦有用vpn 鏈接公司網(wǎng)絡(luò)措左,你的手機(jī)在用charles代理鏈接你的電腦的wifi網(wǎng)絡(luò),有時(shí)候是連不上公司網(wǎng)絡(luò)避除,那你可以先把公司的vpn關(guān)了怎披,讓手機(jī)代理charles鏈接你的wifi網(wǎng)絡(luò),鏈接成功以后瓶摆,在vpn鏈接公司網(wǎng)絡(luò)
charles顯示這個(gè)提示的時(shí)候凉逛,一般是你鏈接代理的時(shí)候出現(xiàn)
用Charles抓包后,關(guān)閉状飞,網(wǎng)絡(luò)正常電腦無(wú)法打開網(wǎng)頁(yè)。解決辦法:
提示:正常情況下將wifi的代理 由手動(dòng)重新設(shè)置成自動(dòng)即可連接书斜。
1 打開網(wǎng)絡(luò)偏好設(shè)置
2 打開網(wǎng)絡(luò)代理 (點(diǎn)擊高級(jí))
3 去掉代理中所有勾選項(xiàng)诬辈;
然后保存就可以了。猜測(cè)原因是請(qǐng)求被攔截了或者是使用Charles時(shí)改了部分設(shè)置荐吉!