抓包使用場景:
1、用手機APP或瀏覽器訪問一個頁面,查看請求的結果是否正確,請求的參數是否正確
2、在不修改任何環(huán)境的情況下,修改返回的結果,即通常所說的mock
3、復雜場景:
比如,同一個域名下的請求,/img/xxx的資源發(fā)送到ServerA上,請求/api/xxx資源發(fā)送到ServerB上
閱讀目錄
1、Fiddler 的基本原理
2、為什么選擇Fiddler,而不是其他工具
3、通過爬蟲 與 Fiddler 的關系,明白為什么需要進行抓包
4、Fiddler設置HTTPS代理
5、使用QuickExec命令行(類似我們平常說的快捷鍵)
6、進行案例的分享
一、Fiddler 的基本原理
我們使用瀏覽器或者客戶端軟件都要與外界進行通信,就必然會有數據的發(fā)送和接收,有時候需要對這些傳遞的數據進行分析,因此需要截獲這些傳遞的數據。
其中對這些數據進行截獲、重發(fā)、編輯、轉存的過程叫做抓包。

本地應用與服務器之間所有的Request 和Response都將經過Fiddler,由Fiddler進行轉發(fā),此時Fiddler以代理服務器的方式存在。
由于所有的網絡數據都會經過Fiddler,因此Fiddler能夠截獲這些數據,實現網絡數據的抓包,可以詳細地對HTTP請求進行分析,并模擬對應的HTTP請求。
二、為什么選擇Fiddler
1、本地化的工具,是一個使用本地 127.0.0.1:8888 的 HTTP 代理
(免費的web調試代理工具,支持任何瀏覽器、系統(tǒng)或平臺)
啟動Fiddler后,通過瀏覽器訪問:http://127.0.0.1:8888

(1)任何能夠設置 HTTP 代理為 127.0.0.1:8888 的瀏覽器和應用程序都可以使用 Fiddler
(2)工具打開后,就自動設置了IE瀏覽器的代理,工具關閉后,IE的設置也將被還原

2、Fiddler本身對http協(xié)議支持較好,且操作簡單容易上手
3、具有抓包和分析功能,省去了安裝其他工具的必要
4、工具本身功能強大
(1)劫包:模擬接口不給前端返回數據,看前端怎么處理,如果沒有工具,就只能采用斷網、停用服務器
(2)篡改數據:假設沒法去模擬前端對于接口返回數據很長時,怎么去展示,換行?截???小屏幕上頁面扭曲?如果通過篡改數據,就能直觀的把數據返回給前端展示,很明顯的看到前端數據是什么樣的,就不需要從底層改數據
(3)模擬低速、弱網環(huán)境等,有些元素加載不出來會導致樣式問題
三、爬蟲 與 Fiddler 的關系
網絡爬蟲是自動爬取網頁的程序,在爬取的過程中必然會涉及客戶端與服務端之間的通信,也需要發(fā)送一些HTTP請求,并接受服務器返回的結果。
有些網址變化肉眼是看不出規(guī)律的,這時配合抓包軟件會變得較容易。
案例:簡書網頁底部“閱讀更多”
在瀏覽一些圖片網站時,瀏覽到最下面的時候會出現一個“閱讀更多”的字樣,此時單擊“閱讀更多”頁面上顯示更多內容,加載出來的內容跟原來的內容是在同一個網頁上展示的。我們直接看網址的變化是看不出任何規(guī)律的,便無法分析該請求是如何實現的,無法通過程序構造出該請求。

此時可以通過Fiddler 進行抓包,對這些數據進行分析,查看request headers 發(fā)現是通過Get請求來實現的,總共有3個參數:order_by、page、per_page
通過分析就可以知道頁面上只顯示20篇文章,之后就需要通過閱讀更多進行加載
每點擊一次閱讀更多,相當于在修改page值

知道實現規(guī)律后,就可以通過編寫程序構造出對應的請求,并由程序自動地實現這些請求的發(fā)送。
假如修改page為3、4、5,在新窗口進行訪問,與頁面閱讀更多進行比對
四、設置HTTPS代理(抓取Firefox上的https請求)
Fiddler 默認是抓 http請求的,對于pc上的 https請求,會提示網頁不安全,這時候需要在瀏覽器上安裝證書
Fiddler可以通過偽造CA證書來欺騙瀏覽器和服務器,大概原理就是在瀏覽器面前Fiddler偽裝成一個HTTPS服務器,而在真正的HTTPS服務器面前Fiddler又裝成瀏覽器,從而實現解密HTTPS數據包的目的。

解決辦法
1、檢查Fiddler設置
- 打開菜單欄:Tools>Fiddler Options>HTTPS
- 勾選Decrypt HTTPS traffic,里面的子菜單也一起勾選了
(檢查沒有問題)
2、導出證書
- 點右上角Actions按鈕(Tools>Fiddler Options>HTTPS)
- 選第二個選項,導出到桌面,此時桌面上會多一個文件:FiddlerRoot.cer

3、導入到Firefox瀏覽器
- 打開瀏覽器,工具>選項>高級>證書>查看證書>證書機構>導入
- 下載證書彈出框,勾選三個選項,確定

測試下結果,打開百度網頁,成功了,接下來就可以進行抓包了

五、使用QuickExec命令行
1、cls (或 clear) 清屏命令
清空會話列表中的所有會話
2、select 篩選某一類型的會話命令
如 select html,輸入命令后敲回車鍵,在會話列表中所有html類型的會話都已被選中

3、? 查找網址中包含某些字符的會話信息
如 ?jianshu 可以查找出網址中包含“jianshu”字符串的會話信息,跟其他會話信息用不同顏色區(qū)分顯示

4、help 幫助命令
打開官方的使用頁面介紹,所有的命令都會列出來
5、bpu、bpafter 斷點命令
- bpu 網址:截獲request (這種方法只會中斷www.baidu.com),中斷請求響應
如bpu https://www.baidu.com/
取消中斷:bpu

- bpafter 網址/會話名:修改Response,中斷某一具體的會話
比如 bpafter www.baidu.com
如果想消除命令的話,在命令行中輸入“bpafter”
6、dump 快速保存

六、案例分享
以 鐵路網的貨物跟蹤 為例
頁面有車號、貨票號、驗證碼三個字段,通過輸入不同格式的值來觀察頁面提示與 Fiddler 抓包返回的 json值
1、先輸入格式正確的值,點查詢

2、修改貨票號的位數,點查詢

剛接觸Fiddler時,遇到這種情況我們肯定會有疑惑,那接下來就分析下為什么會是這樣的結果:
1、兩次抓包的接口是一樣嗎?第一個是post,第二個是get,不是同一個
2、第二個請求沒有發(fā)出去,應該是前端直接對數值的位數做了校驗的,這個時候就不會調接口,所以就沒有數據顯示了
如想更深入的使用Fiddler,請查看進階篇