本文背景
公司新項目要求抓取目前市面上一些熱門App的數據,經過研究發(fā)現很多App的網絡請求都使用https進行數據傳輸饱溢,這樣問題就來了绩郎,http使用明文傳輸所有請求都能攔截到,而https請求無法攔截肋杖。
所以這里我們要使用Charles來抓取https,但是筆者看了網上很多使用iOS設備進行抓取https的文章浊竟,經測試iOS8/10/11均無法進行正常抓取,即使信任證書也不行津畸。
經過筆者的不斷嘗試,終于在Android5.0上成功抓取了https推捐。研究后發(fā)現,在Android7.0以下可以正常使用Charles抓取。Android7.0以上應該是默認屏蔽了此種方法露久。
Charles安裝
Charles配置
配置電腦端的根證書
-
打開Charles,我這里使用的是v4.2.5版本:
-
安裝根證書
-
Mac需要設置信任證書
-
安裝后會彈出鑰匙串訪問界面抱环,如圖:
-
雙擊證書,彈出證書詳細界面瘤旨,點擊『信任』選項,然后將所有設置為始終信任因宇,如圖:
-
在手機端配置根證書
-
在電腦端選擇安裝移動端的證書:
-
選擇后會顯示IP與端口號,用于手機設置http代理:
-
手機的網絡上設置成電腦的http代理:
此時必須保證手機和電腦在同一網絡贺辰,并且手機可以訪問電腦的ip與端口
-
設置完成后訪問網絡時饲化,服務端會彈出提示,點擊Allow(同意連接):
-
手機瀏覽器(筆者使用Chrome)訪問chls.pro/ssl,下載證書并安裝(證書名任意):
配置電腦端的抓取規(guī)則
-
進入Charles的SSL代理設置:
2.勾上啟動SSL代理礁阁,并添加一個抓取規(guī)則氮兵,比如這里加上一個抓取所有https(443端口)的請求:
3.此時手機上打開https請求的應用泣栈,應該就可以正常看到https請求的數據了:如圖:
常見問題
1. 配置好后無法打開APP
在我們抓取時碰到個別APP在配置代理后無法打開,這個主要是因為該APP做了防止抓取處理疼进,比如校驗https的證書是否合法等秧廉,這種解決方法可以通過反編譯APP,查看源碼解決嚼锄,難度較大区丑。
2. 抓取到的內容為亂碼
有的APP為了防止抓取修陡,在返回的內容上做了層加密魄鸦,所以從Charles上看到的內容是亂碼。這種情況下也只能反編譯APP,研究其加密解密算法進行解密旺罢。