相比Fiddler來說,Charles的功能更強大,而且跨平臺支持更好。所以我們選用Charles作為主要的移動端抓包工具,用於分析移動App的數據包,輔助完成App數據抓取工作。
壹、本節目標
本節我們以京東App為例,通過Charles抓取App運行過程中的網絡數據包,然後查看具體的Request和Response內容,以此來了解Charles的用法。
二、準備工作
請確保已經正確安裝Charles並開啟了代理服務,手機和Charles處於同壹個局域網下,Charles代理和CharlesCA證書設置好。
三、原理
首先Charles運行在自己的PC上,Charles運行的時候會在PC的8888端口開啟壹個代理服務,這個服務實際上是壹個HTTP/HTTPS的代理。
確保手機和PC在同壹個局域網內,我們可以使用手機模擬器通過虛擬網絡連接,也可以使用手機真機和PC通過無線網絡連接。
設置手機代理為Charles的代理地址,這樣手機訪問互聯網的數據包就會流經Charles,Charles再轉發這些數據包到真實的服務器,服務器返回的數據包再由Charles轉發回手機,Charles就起到中間人的作用,所有流量包都可以捕捉到,因此所有HTTP請求和響應都可以捕獲到。同時Charles還有權力對請求和響應進行修改。
四、抓包
初始狀態下Charles的運行界面如下圖所示。
Charles會壹直監聽PC和手機發生的網絡數據包,捕獲到的數據包就會顯示在左側,隨著時間的推移,捕獲的數據包越來越多,左側列表的內容也會越來越多。
可以看到,圖中左側顯示了Charles抓取到的請求站點,我們點擊任意壹個條目便可以查看對應請求的詳細信息,其中包括Request、Response等內容。
接下來清空Charles的抓取結果,點擊左側的掃帚按鈕即可清空當前捕獲到的所有請求。然後點擊第二個監聽按鈕,確保監聽按鈕是打開的,這表示Charles正在監聽App的網絡數據流,如下圖所示。
這時打開手機京東,註意壹定要提前設置好Charles的代理並配置好CA證書,否則沒有效果。
打開任意壹個商品,如iPhone,然後打開它的商品評論頁面,如下圖示。
不斷上拉加載評論,可以看到Charles捕獲到這個過程中京東App內發生的所有網絡請求,如下圖所示。
左側列表中會出現壹個api.m.jd.com鏈接,而且它在不停閃動,很可能就是當前App發出的獲取評論數據的請求被Charles捕獲到了。我們點擊將其展開,繼續上拉刷新評論。隨著上拉的進行,此處又會出現壹個個網絡請求記錄,這時新出現的數據包請求確定就是獲取評論的請求。
為了驗證其正確性,我們點擊查看其中壹個條目的詳情信息。切換到Contents選項卡,這時我們發現壹些JSON數據,核對壹下結果,結果有commentData字段,其內容和我們在App中看到的評論內容壹致,如下圖所示。
這時可以確定,此請求對應的接口就是獲取商品評論的接口。這樣我們就成功捕獲到了在上拉刷新的過程中發生的請求和響應內容。
五、分析
現在分析壹下這個請求和響應的詳細信息。首先可以回到Overview選項卡,上方顯示了請求的接口URL,接著是響應狀態Status Code、請求方式Method等,如下圖所示。
這個結果和原本在Web端用瀏覽器開發者工具內捕獲到的結果形式是類似的。
接下來點擊Contents選項卡,查看該請求和響應的詳情信息。
上半部分顯示的是Request的信息,下半部分顯示的是Response的信息。比如針對Reqeust,我們切換到Headers選項卡即可看到該Request的Headers信息,針對Response,我們切換到JSON TEXT選項卡即可看到該Response的Body信息,並且該內容已經被格式化,如下圖所示。
由於這個請求是POST請求,我們還需要關心POST的表單信息,切換到Form選項卡即可查看,如下圖所示。
這樣我們就成功抓取App中的評論接口的請求和響應,並且可以查看Response返回的JSON數據。
至於其他App,我們同樣可以使用這樣的方式來分析。如果我們可以直接分析得到請求的URL和參數的規律,直接用程序模擬即可批量抓取。
六、重發
Charles還有壹個強大功能,它可以將捕獲到的請求加以修改並發送修改後的請求。點擊上方的修改按鈕,左側列表就多了壹個以編輯圖標為開頭的鏈接,這就代表此鏈接對應的請求正在被我們修改,如下圖所示。
我們可以將Form中的某個字段移除,比如這裏將partner字段移除,然後點擊Remove。這時我們已經對原來請求攜帶的Form Data做了修改,然後點擊下方的Execute按鈕即可執行修改後的請求,如下圖所示。
可以發現左側列表再次出現了接口的請求結果,內容仍然不變,如下圖所示。
刪除Form表單中的partner字段並沒有帶來什麽影響,所以這個字段是無關緊要的。
有了這個功能,我們就可以方便地使用Charles來做調試,可以通過修改參數、接口等來測試不同請求的響應狀態,就可以知道哪些參數是必要的哪些是不必要的,以及參數分別有什麽規律,最後得到壹個最簡單的接口和參數形式以供程序模擬調用使用。
七、結語
以上內容便是通過Charles抓包分析App請求的過程。通過Charles,我們成功抓取App中流經的網絡數據包,捕獲原始的數據,還可以修改原始請求和重新發起修改後的請求進行接口測試。
知道了請求和響應的具體信息,如果我們可以分析得到請求的URL和參數的規律,直接用程序模擬即可批量抓取!
手機爬蟲非常有意思,而且可以爬取的數據非常多,當然還有很多東西要學。以後我也會寫壹些實戰的有趣案例給大家。