往期內容提要:
- [Python爬蟲] 一、爬蟲原理之HTTP和HTTPS的請求與響應
- [Python爬蟲] 二、爬蟲原理之定義、分類、流程與編碼格式
- [Python爬蟲] 三、數據抓取之Requests HTTP 庫
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) 部分
- Headers —— 顯示客戶端發送到服務器的 HTTP 請求的 header,顯示爲一個分級視圖,包含了 Web 客戶端信息、Cookie、傳輸狀態等。
- Textview —— 顯示 POST 請求的 body 部分爲文本。
- WebForms —— 顯示請求的 GET 參數 和 POST body 內容。
- HexView —— 用十六進制數據顯示請求。
- Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 信息.
- Raw —— 將整個請求顯示爲純文本。
- JSON - 顯示JSON格式文件。
- XML —— 如果請求的 body 是 XML 格式,就是用分級的 XML 樹來顯示它。
響應 (Response) 部分
- Transformer —— 顯示響應的編碼信息。
- Headers —— 用分級視圖顯示響應的 header。
- TextView —— 使用文本顯示相應的 body。
- ImageVies —— 如果請求是圖片資源,顯示響應的圖片。
- HexView —— 用十六進制數據顯示響應。
- WebView —— 響應在 Web 瀏覽器中的預覽效果。
- Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 信息。
- Caching —— 顯示此請求的緩存信息。
- Privacy —— 顯示此請求的私密 (P3P) 信息。
- Raw —— 將整個響應顯示爲純文本。
- JSON - 顯示JSON格式文件。
- XML —— 如果響應的 body 是 XML 格式,就是用分級的 XML 樹來顯示它 。
五、使用Fiddler進行HTTP斷點調試
(1)Fiddler可以做到:
-
修改HTTP請求頭信息。例如修改請求頭的UA, Cookie, Referer 信息,通過“僞造”相應信息達到達到相應的目的(調試,模擬用戶真實請求等)。
-
構造請求數據,突破錶單的限制,隨意提交數據。避免頁面js和表單限制影響相關調試。
-
攔截響應數據,修改響應實體。
(2)兩種方式設置斷點:
- 方式一:fiddler菜單欄->rules->automatic Breakpoints->選擇斷點方式,這種方式下設定的斷點會對之後的所有HTTP請求有效。
有兩個斷點位置:
a. before response。也就是發送請求之後,但是Fiddler代理中轉之前,這時可以修改請求的數據。
b.after response。也就是服務器響應之後,但是在Fiddler將響應中轉給客戶端之前。這時可以修改響應的結果。
- 方式二:命令行下輸入。Bpafter xxx或者bpv,bpu,bpm等設置斷點(詳見後文)。
(3)三種方式終止斷點:
-
在inspector界面點擊“run complete“即會終止本次HTTP請求的斷點。
-
輸入go命令,也會使得當前的請求跳過斷點。
-
在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請求。
後期內容提要:
- [Python爬蟲] 五、數據提取之正則表達式re模塊
- [Python爬蟲] 六、數據提取之XPath與lxml類庫
- [Python爬蟲] 七、結構化數據提取之JSON與JsonPATH
- [Python爬蟲] 八、動態HTML處理之Selenium與PhantomJS
- [Python爬蟲] 九、機器視覺與機器圖像識別之Tesseract
- [Python爬蟲] 十、Scrapy 框架
如果您有任何疑問或者好的建議,期待你的留言與評論!