天天看點

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

11.1 Charles 的使用

Charles 是一個網絡抓包工具,我們可以用它來做 App 的抓包分析,得到 App 運作過程中發生的所有網絡請求和響應内容,這就和 Web 端浏覽器的開發者工具 Network 部分看到的結果一緻。

很多人學習python,不知道從何學起。

很多人學習python,掌握了基本文法過後,不知道在哪裡尋找案例上手。

很多已經做案例的人,卻不知道如何去學習更加高深的知識。

那麼針對這三類人,我給大家提供一個好的學習平台,免費領取視訊教程,電子書籍,以及課程的源代碼!

QQ群:101677771

相比 Fiddler 來說,Charles 的功能更強大,而且跨平台支援更好。是以我們選用 Charles 作為主要的移動端抓包工具,用于分析移動 App 的資料包,輔助完成 App 資料抓取工作。

1. 本節目标

本節我們以京東 App 為例,通過 Charles 抓取 App 運作過程中的網絡資料包,然後檢視具體的 Request 和 Response 内容,以此來了解 Charles 的用法。

2. 準備工作

請確定已經正确安裝 Charles 并開啟了代理服務,手機和 Charles 處于同一個區域網路下,Charles 代理和 CharlesCA 證書設定好,另外需要開啟 SSL 監聽,具體的配置可以參考第 1 章的說明。

3. 原理

首先 Charles 運作在自己的 PC 上,Charles 運作的時候會在 PC 的 8888 端口開啟一個代理服務,這個服務實際上是一個 HTTP/HTTPS 的代理。

確定手機和 PC 在同一個區域網路内,我們可以使用手機模拟器通過虛拟網絡連接配接,也可以使用手機真機和 PC 通過無線網絡連接配接。

設定手機代理為 Charles 的代理位址,這樣手機通路網際網路的資料包就會流經 Charles,Charles 再轉發這些資料包到真實的伺服器,伺服器傳回的資料包再由 Charles 轉發回手機,Charles 就起到中間人的作用,所有流量包都可以捕捉到,是以所有 HTTP 請求和響應都可以捕獲到。同時 Charles 還有權力對請求和響應進行修改。

4. 抓包

初始狀态下 Charles 的運作界面如圖 11-1 所示:

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-1 Charles 運作界面

Charles 會一直監聽 PC 和手機發生的網絡資料包,捕獲到的資料包就會顯示在左側,随着時間的推移,捕獲的資料包越來越多,左側清單的内容也會越來越多。

可以看到,圖中左側顯示了 Charles 抓取到的請求站點,我們點選任意一個條目便可以檢視對應請求的詳細資訊,其中包括 Request、Response 等内容。

接下來清空 Charles 的抓取結果,點選左側的掃帚按鈕即可清空目前捕獲到的所有請求。然後點選第二個監聽按鈕,確定監聽按鈕是打開的,這表示 Charles 正在監聽 App 的網絡資料流,如圖 11-2 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-2 監聽過程

這時打開手機京東,注意一定要提前設定好 Charles 的代理并配置好 CA 證書,否則沒有效果。

打開任意一個商品,如 iPhone,然後打開它的商品評論頁面,如圖 11-3 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-3 評論頁面

不斷上拉加載評論,可以看到 Charles 捕獲到這個過程中京東 App 内發生的所有網絡請求,如圖 11-4 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-4 監聽結果

左側清單中會出現一個 api.m.jd.com 連結,而且它在不停閃動,很可能就是目前 App 發出的擷取評論資料的請求被 Charles 捕獲到了。我們點選将其展開,繼續上拉重新整理評論。随着上拉的進行,此處又會出現一個個網絡請求記錄,這時新出現的資料包請求确定就是擷取評論的請求。

為了驗證其正确性,我們點選檢視其中一個條目的詳情資訊。切換到 Contents 頁籤,這時我們發現一些 JSON 資料,核對一下結果,結果有 commentData 字段,其内容和我們在 App 中看到的評論内容一緻,如圖 11-5 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-5 Json 資料結果

這時可以确定,此請求對應的接口就是擷取商品評論的接口。這樣我們就成功捕獲到了在上拉重新整理的過程中發生的請求和響應内容。

5. 分析

現在分析一下這個請求和響應的詳細資訊。首先可以回到 Overview 頁籤,上方顯示了請求的接口 URL,接着是響應狀态 Status Code、請求方式 Method 等,如圖 11-6 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-6 監聽結果

這個結果和原本在 Web 端用浏覽器開發者工具内捕獲到的結果形式是類似的。

接下來點選 Contents 頁籤,檢視該請求和響應的詳情資訊。

上半部分顯示的是 Request 的資訊,下半部分顯示的是 Response 的資訊。比如針對 Reqeust,我們切換到 Headers 頁籤即可看到該 Request 的 Headers 資訊,針對 Response,我們切換到 JSON TEXT 頁籤即可看到該 Response 的 Body 資訊,并且該内容已經被格式化,如圖 11-7 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-7 監聽結果

由于這個請求是 POST 請求,是以我們還需要關心的就是 POST 的表單資訊,切換到 Form 頁籤即可檢視,如圖 11-8 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-8 監聽結果

這樣我們就成功抓取 App 中的評論接口的請求和響應,并且可以檢視 Response 傳回的 JSON 資料。

至于其他 App,我們同樣可以使用這樣的方式來分析。如果我們可以直接分析得到請求的 URL 和參數的規律,直接用程式模拟即可批量抓取。

6. 重發

Charles 還有一個強大功能,它可以将捕獲到的請求加以修改并發送修改後的請求。點選上方的修改按鈕,左側清單就多了一個以編輯圖示為開頭的連結,這就代表此連結對應的請求正在被我們修改,如圖 11-9 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-9 編輯頁面

我們可以将 Form 中的某個字段移除,比如這裡将 partner 字段移除,然後點選 Remove。這時我們已經對原來請求攜帶的 Form Data 做了修改,然後點選下方的 Execute 按鈕即可執行修改後的請求,如圖 11-10 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-10 編輯頁面

可以發現左側清單再次出現了接口的請求結果,内容仍然不變,如圖 11-11 所示。

Python3網絡爬蟲開發實戰,抓包工具 Charles 的使用11.1 Charles 的使用

圖 11-11 重新請求後結果

删除 Form 表單中的 partner 字段并沒有帶來什麼影響,是以這個字段是無關緊要的。

有了這個功能,我們就可以友善地使用 Charles 來做調試,可以通過修改參數、接口等來測試不同請求的響應狀态,就可以知道哪些參數是必要的哪些是不必要的,以及參數分别有什麼規律,最後得到一個最簡單的接口和參數形式以供程式模拟調用使用。

7. 結語

以上内容便是通過 Charles 抓包分析 App 請求的過程。通過 Charles,我們成功抓取 App 中流經的網絡資料包,捕獲原始的資料,還可以修改原始請求和重新發起修改後的請求進行接口測試。

知道了請求和響應的具體資訊,如果我們可以分析得到請求的 URL 和參數的規律,直接用程式模拟即可批量抓取,這當然最好不過了。

但是随着技術的發展,App 接口往往會帶有密鑰,我們并不能直接找到這些規律,那麼怎麼辦呢?接下來,我們将了解利用 Charles 和 mitmdump 直接對接 Python 腳本實時處理抓取到的 Response 的過程。