[Python爬蟲] 四、數據抓取之HTTP/HTTPS抓包工具Fiddler


往期內容提要:


Fiddler是一款強大Web調試工具,它能記錄所有客戶端和服務器的HTTP請求。 點此下載 Fiddler

一、HTTP代理神器Fiddler工作原理

Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888.

在這裏插入圖片描述


二、Fiddler抓取HTTPS設置

(1) 安裝並啓動Fiddler;
(2) 對Fiddler進行設置:

在這裏插入圖片描述

  • 打開工具欄->Tools->Options->HTTPS選項卡;
  • 選中Capture HTTPS CONNECTs (捕捉HTTPS連接);
  • 選中Decrypt HTTPS traffic(解密HTTPS通信);/li>
  • 另外我們要用Fiddler獲取本機所有進程的HTTPS請求,所以中間的下拉菜單中選中...from all processes (從所有進程);
  • 選中下方Ignore server certificate errors(忽略服務器證書錯誤);

  • 爲 Fiddler 配置Windows信任這個根證書解決安全警告:Trust Root Certificate(受信任的根證書);

在這裏插入圖片描述

(3) Fiddler 主菜單 Tools -> Options…-> Connections選項卡
  • 選中Allow remote computers to connect(允許遠程連接);
  • Act as system proxy on startup(作爲系統啓動代理);

在這裏插入圖片描述

(4) 重啓Fiddler,使配置生效(很重要)。

三、Fiddler 如何捕獲Chrome的會話

在這裏插入圖片描述

設置好後,本機HTTP通信都會經過127.0.0.1:8888代理,會被Fiddler攔截到。因此運行即可捕獲,如無法正常捕獲:

(1) 安裝SwitchyOmega 代理管理 Chrome 瀏覽器插件
(2) 如圖所示,設置代理服務器爲127.0.0.1:8888
(3) 通過瀏覽器插件切換爲設置好的代理

在這裏插入圖片描述


四、Fiddler界面

在這裏插入圖片描述
主界面中主要包括四個常用的塊:

1.Fiddler的菜單欄,上圖綠色部分。包括捕獲http請求,停止捕獲請求,保存http請求,載入本地session、設置捕獲規則等功能。

2.Fiddler的工具欄,上圖紅色部分。包括Fiddler針對當前view的操作(暫停,清除session,decode模式、清除緩存等)。

3.web Session面板,上圖黃色區域,主要是Fiddler抓取到的每條http請求(每一條稱爲一個session),主要包含了請求的url,協議,狀態碼,body等信息,詳細的字段含義如下圖所示:
在這裏插入圖片描述
在這裏插入圖片描述
4.詳情和數據統計面板。針對每條http請求的具體統計(例如發送/接受字節數,發送/接收時間,還有粗略統計世界各地訪問該服務器所花費的時間)和數據包分析。

在這裏插入圖片描述

  • 如inspector面板下,提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息;其分爲上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分。對於每一部分,提供了多種不同格式查看每個請求和響應的內容。JPG 格式使用 ImageView 就可以看到圖片,HTML/JS/CSS 使用 TextView 可以看到響應的內容。Raw標籤可以查看原始的符合HTTP標準的請求和響應頭。Auth則可以查看授權Proxy-Authorization 和 Authorization的相關信息。Cookies標籤可以看到請求的cookie和響應的set-cookie頭信息。
  • 而composer面板下,則可以模擬向相應的服務器發送數據的過程,也可以粘貼一次請求的raw http headers,達到模擬請求的目的。
  • Filter標籤則可以設置Fiddler的過濾規則,來達到過濾http請求的目的。最簡單如:過濾內網http請求而只抓取internet的http請求,或則過濾相應域名的http請求。Fiddler的過濾器非常強大,可以過濾特定http狀態碼的請求,可以過濾特定請求類型的http請求(如css請求,image請求,js請求等),可以過濾請求報文大於或則小於指定大小(byte)的請求。
  • AutoResponder面板是Fiddler比較重要且比較強大的功能之一。可用於攔截某一請求,並重定向到本地的資源,或者使用Fiddler的內置響應。可用於調試服務器端代碼而無需修改服務器端的代碼和配置,因爲攔截和重定向後,實際上訪問的是本地的文件或者得到的是Fiddler的內置響應。因此,如果要調試服務器的某個腳本文件,可以將該腳本攔截到本地,在本地修改完腳本之後,再修改服務器端的內容,這可以保證,儘量在真實的環境下去調試,從而最大限度的減少bug發生的可能性。
請求 (Request) 部分
  1. Headers —— 顯示客戶端發送到服務器的 HTTP 請求的 header,顯示爲一個分級視圖,包含了 Web 客戶端信息、Cookie、傳輸狀態等。
  2. Textview —— 顯示 POST 請求的 body 部分爲文本。
  3. WebForms —— 顯示請求的 GET 參數 和 POST body 內容。
  4. HexView —— 用十六進制數據顯示請求。
  5. Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 信息.
  6. Raw —— 將整個請求顯示爲純文本。
  7. JSON - 顯示JSON格式文件。
  8. XML —— 如果請求的 body 是 XML 格式,就是用分級的 XML 樹來顯示它。
響應 (Response) 部分
  1. Transformer —— 顯示響應的編碼信息。
  2. Headers —— 用分級視圖顯示響應的 header。
  3. TextView —— 使用文本顯示相應的 body。
  4. ImageVies —— 如果請求是圖片資源,顯示響應的圖片。
  5. HexView —— 用十六進制數據顯示響應。
  6. WebView —— 響應在 Web 瀏覽器中的預覽效果。
  7. Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 信息。
  8. Caching —— 顯示此請求的緩存信息。
  9. Privacy —— 顯示此請求的私密 (P3P) 信息。
  10. Raw —— 將整個響應顯示爲純文本。
  11. JSON - 顯示JSON格式文件。
  12. XML —— 如果響應的 body 是 XML 格式,就是用分級的 XML 樹來顯示它 。

五、使用Fiddler進行HTTP斷點調試

(1)Fiddler可以做到:
  1. 修改HTTP請求頭信息。例如修改請求頭的UA, Cookie, Referer 信息,通過“僞造”相應信息達到達到相應的目的(調試,模擬用戶真實請求等)。

  2. 構造請求數據,突破錶單的限制,隨意提交數據。避免頁面js和表單限制影響相關調試。

  3. 攔截響應數據,修改響應實體。

(2)兩種方式設置斷點:
  • 方式一:fiddler菜單欄->rules->automatic Breakpoints->選擇斷點方式,這種方式下設定的斷點會對之後的所有HTTP請求有效。

有兩個斷點位置:

a. before response。也就是發送請求之後,但是Fiddler代理中轉之前,這時可以修改請求的數據。

b.after response。也就是服務器響應之後,但是在Fiddler將響應中轉給客戶端之前。這時可以修改響應的結果。

  • 方式二:命令行下輸入。Bpafter xxx或者bpv,bpu,bpm等設置斷點(詳見後文)。
(3)三種方式終止斷點:
  1. 在inspector界面點擊“run complete“即會終止本次HTTP請求的斷點。

  2. 輸入go命令,也會使得當前的請求跳過斷點。

  3. 在rules->auto breakpoint中disabled斷點即可。


六、Fiddler內置命令

Fiddler提供了一系列內置的函數用於篩選和操作session。輸入命令的位置在web session管理面板的下方(通過快捷鍵alt+q可以focus到命令行)。

命令名稱 作用
select 選擇所有相應類型(指content-type)爲指定類型的HTTP請求
allbut 選擇所有響應類型不是給定類型的HTTP請求
?text 選擇所有 URL 匹配問號後的字符的全部 session
>size <size 選擇響應大小大於某個大小(單位是b)或者小於某個大小的所有HTTP請求
=status 選擇響應狀態等於給定狀態的所有HTTP請求。
@host 選擇包含指定 HOST 的全部 HTTP請求。例如:@csdn.net
Bpafter Bps, bpv, bpm, bpu 批量設置斷點

特別說明:

(1) select命令

選擇所有相應類型(指content-type)爲指定類型的HTTP請求,如選擇圖片,使用命令select image.而select css則可以選擇所有相應類型爲css的請求,select html則選擇所有響應爲HTML的請求。

(2) allbut命令

allbut命令用於選擇所有響應類型不是給定類型的HTTP請求。如allbut image用於選擇所有相應類型不是圖片的session(HTTP請求),該命令還有一個別名keeponly.需要注意的是,keeponly和allbut命令是將不是該類型的session刪除,留下的都是該類型的響應。因此,如果你執行allbut xxxx(不存在的類型),實際上類似與執行cls命令(刪除所有的session, ctrl+x快捷鍵也是這個作用)。

(3) Bpafter, Bps, bpv, bpm, bpu

這幾個命令主要用於批量設置斷點:

Bpafter xxx: 中斷 URL 包含指定字符的全部 session 響應;

Bps xxx: 中斷 HTTP 響應狀態爲指定字符的全部 session 響應;

Bpv xxx: 中斷指定請求方式的全部 session 響應;

Bpm xxx: 中斷指定請求方式的全部 session 響應。等同於bpv xxx;

Bpu xxx:與bpafter類似。

當這些命令沒有加參數時,會清空所有設置了斷點的HTTP請求。


後期內容提要:


如果您有任何疑問或者好的建議,期待你的留言與評論!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章