我們在開發網站項目的時候,我們可以通過瀏覽器的debug模式來看request以及response的數據,那么如果我們開發移動端項目沒有網頁呢?如何抓取數據呢?
前幾天有個做服務端的師弟跟我說他不用抓包工具,遇到問題直接debug代碼,那我問他,如果線上服務的話,你怎么調?在實際項目中,沒有遇到跟客戶端相互扯皮的事情嗎?我覺得很正常啊,客戶端說他沒問題,服務端也說他沒問題,到底誰有問題?這時候沒必要相互推脫,拿數據出來說話才是王道。抓包工具做了什么?它把客戶端的請求數據,以及服務端返回的數據完完整整的抓取下來,供攻城獅分析問題。所以首先分析問題才是最重要的,而不是一上來就跟蹤代碼debug。

Charles
是一個HTTP代理服務器,HTTP監視器,反轉代理服務器,當程序連接Charles的代理訪問互聯網時,Charles可以監控這個程序發送和接收的所有數據。它允許一個開發者查看所有連接互聯網的HTTP通信,這些包括request,
response和HTTP headers (包含cookies與caching信息)。
Charles主要功能:
1. 支持SSL代理。可以截取分析SSL的請求。
2. 支持流量控制。可以模擬慢速網絡以及等待時間(latency)較長的請求。
3. 支持AJAX調試。可以自動將json或xml數據格式化,方便查看。
4. 支持AMF調試。可以將Flash Remoting 或 Flex Remoting信息格式化,方便查看。
5. 支持重發網絡請求,方便后端調試。
6. 支持修改網絡請求參數。
7. 支持網絡請求的截獲並動態修改。
8. 檢查HTML,CSS和RSS內容是否符合W3C標准。

Charles安裝:
去Charles的官方網站(http://www.charlesproxy.com)下載最新版的相應操作系統的Charles安裝包安裝即可。
Charles是收費軟件,可以免費試用30天。試用期過后,未付費的用戶仍然可以繼續使用,但是每次使用時間不能超過30分鍾,並且啟動時將會有10秒種的延時。
因此,該付費方案對廣大用戶還是相當友好的,即使你長期不付費,也能使用完整的軟件功能。只是當你需要長時間進行封包調試時,會因為Charles強制關閉而遇到影響。(偷偷告訴你,公眾號回復“Charles”獲取破解版下載鏈接)
Charles的功能很強大,我們這里只介紹幾個常用的並且非常實用的功能:
1. 將Charles設置成系統代理
2. 截取移動設備上的網絡請求包
2.1手動重復請求(Repeat,Advanced Repeat)
2.2手動模擬請求(Compose)
2.3修改網絡請求內容(Compose)
3. 過濾網絡請求
4. 代理轉發
5. 支持https請求抓包(如果配置了還是抓不到,下面有解決方案)
Charles 主要提供兩種查看封包的視圖,分別名為 “Structure” 和 “Sequence”。
1. Structure 視圖將網絡請求按訪問的域名分類。
2. Sequence 視圖將網絡請求按訪問的時間排序。

下面將一一介紹這些如何配置和使用
一. 將Charles設置成系統代理
Charles 是通過將自己設置成代理服務器來完成抓包的,勾選系統代理后,系統本地發出去的請求都能被截取下來。如果只抓取APP的包的話,可關閉此配置,這樣不會出現太多的數據看着比較亂。
Mac

Windows:

需要注意的是,Chrome 和 Firefox 瀏覽器默認並不使用系統的代理服務器設置,而 Charles
是通過將自己設置成代理服務器來完成封包截取的,所以在默認情況下無法截取 Chrome 和 Firefox
瀏覽器的網絡通訊內容。如果你需要截取的話,在 Chrome 中設置成使用系統的代理服務器設置即可,或者直接將代理服務器設置成
127.0.0.1:8888 也可達到相同效果。
二. 截取移動設備上的網絡請求包
我們在調試移動APP時,需要抓取APP發送的數據包,首先進行設置,Proxy -> Proxy Settings默認端口是8888,根據實際情況可修改。

查看本機IP地址:Help -> Local IP Addresses

然后配置手機代理:
IOS和Android配置差不多

打開要調試的APP,請求就會先發送到Charles,然后驗證是否允許訪問。

當點擊允許后,可以在Proxy -> Access Control Settings里看到可以訪問此代理服務器列表

注意
如果不小心點擊了拒絕,可以手動添加手機IP/Mac地址到允許訪問列表,或者重啟Charles,手機再次訪問,會再次提示選擇。
如果不想每換一個手機都要進行驗證,可以配置允許所有手機訪問,加入
0.0.0.0/0(IPv4)或::/0(IPv6)
現在就可以抓包了,拿一款我們公司開發的樂視車聯APP來做測試:



三. 過濾網絡請求
通常情況下,網絡請求是非常大量的,從幾十個請求里找到我們需要的觀察的某個請求比較費時,那么我們就需要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。有兩種方法:
1. 在Sequence界面的中部的Filter欄中填入需要過濾出來的關鍵字。例如我們的服務器的地址是:*.leautolink.com,那么只需要在Filter欄中填入leautolink即可。(一般用於臨時過濾)

2. 在Charles的菜單欄選擇"Proxy"->"Recording Settings",然后選擇Include欄,選擇添加一個項目,然后填入需要監控的協議,主機地址,端口號。這樣就可以只截取目標網站的封包了。如下圖所示:(固定過濾地址)

四. 代理轉發
實際開發時,有這樣的場景,服務端線上版本有bug,你在本地修改程序后,需要模擬實際的線上環境,來驗證程序的正確性,最笨的方法就是讓客戶端修改一下APP的調用地址到你本機,然后重新打一個版本供你模擬測試,這樣雖然可以,但每次遇到bug都要這么做的話,那效率極其低下,然而Charles為我們解決了這個問題。
請求轉發,把調用方調用的地址轉發到你本機地址的程序進行執行。
右鍵 -> Map Remote ...


並且配置Tools -> Map Romote

運行APP

五. Https請求抓包
默認我們是看不到https的請求數據的。我們需要安裝證書。


Mac:


雙擊打開Charles Proxy CA



手機配置完代理(必須的操作)后,瀏覽器打開http://chls.pro/ssl


然后配置Proxy -> SSL Proxying Settings... 添加要抓取的https請求

然后再次請求:

如果不再使用Charles,想刪除手機里的證書文件怎么刪除呢?
設置->通用->描述文件與設備管理,刪除指定的證書即可

Windows:


下一步

然后繼續下一步直到導入成功。

剩下的配置與Max下配置相同
SSL的問題:
最近iPhone系統更新到ios
10.3后,用Charles抓包竟然出現了一些問題,https的請求都會失敗,提示錯誤信息為Failure SSLHandshake:
Received fatal alert: unknown_ca 和You may need to configure your browser
or application to trust the Charles Root Certificate.
然而之前任何問題都沒有,並且相關設置都正確:電腦上安裝了Charles的根證書,並且設置了始終信任,然后手機上也登錄了http://chls.pro/ssl安裝了描述文件,一切都按正常程序走的,但是錯誤始終無法解決.
原因:
雖然charles的根證書已經在安裝列表中顯示,但它是被關閉的。在iOS
10.3之前,當你將安裝一個自定義證書,iOS會默認信任,不需要進一步的設置。而iOS
10.3之后,安裝新的自定義證書默認是不受信任的。如果要信任已安裝的自定義證書,需要手動打開開關以信任證書。
解決:
設置->通用->關於本機->證書信任設置-> 找到charles proxy custom root certificate然后信任該證書即可.

Windows系統無法上網的問題
在windows下,如果Charles沒有正常關閉,或者系統重啟后無法上網的問題,因為Charles做了系統代理,當上網的時候,首先先訪問代理服務器,然后代理再去鏈接網絡,這時候Charles是非正常關閉的,只要重新打開Charles即可上網正常,正常關閉Charles后同樣沒問題。
寫給測試人員的
另外抓包工具不只是開發人員獨享的,任何一個參與項目的人都可以使用,測試工程師,運維,產品經理等等任何對技術感興趣的人,尤其是測試工程師,在測試的過程中遇到問題,不是簡單的bug記錄員,而要做到問題的分析員,這才是真正的“工程師”,當bug真正的到開發這的時候,他拿到的是不僅僅是bug,包含了分析過程,分析的數據,甚至是解決方案。我覺得這才是標准工作方式。
其他學習資料:https://www.cnblogs.com/ymfdcome/p/6847315.html
作者:MR_LiY
鏈接:https://www.jianshu.com/p/d0a5e6986445
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。