一、Fiddler 簡介
Fiddler 是一個使用 C# 編寫的 http 抓包工具。它使用靈活,功能強大,支持衆多的 http 調試任務,是 web、移動應用的開發調試利器。
我很早之前的一篇文章 Fiddler抓取數據,20行代碼賺500塊,湊巧幫那位朋友解決了他的需求。隔了這麼久又有人找我抓公衆號數據。今天就分享一下我是如何使用 Fiddler 工具的。
二、實戰
2.1 工具安裝
Fiddler下載地址 :https://www.telerik.com/fiddler
訪問鏈接,進入網站首頁,如下圖
點擊下載,然後會跳到一個問卷頁面,填寫信息可以下載了。雙擊下載好的安裝程序,點擊“下一步”就可安裝。
2.2 PC 端請求抓取
查看請求
打開 Fiddler
工具,顯示效果如下圖:
兩個設置
-
打開
fiddler
,點擊工具菜單Tools->optins..->HTTPS
頁籤,修改如下內容:
這裏主要勾選Decrypt HTTPS traffic
這個選項,並選擇...from all processes
即可。並點擊右側的Actions
,導出證書到桌面。
-
打開瀏覽器
Internet 選項->連接->局域網設置
,彈出如下頁面,這裏主要添加一下本地代理的IP地址和端口。
注:windows 好像不需要這一步設置。
過濾請求
選中 Fiddler
中一條記錄,右鍵 Filter Now
,然後選擇 Hide 'xxx'
即可進行過濾。
如下圖右鍵過濾的請求,就可以自動取消過濾。
2.3 手機客戶端請求抓取
fiddler 配置
打開 fiddler
,點擊工具菜單Tools->optins..->Connections
頁籤,勾選 Allow remote computers to conect
即可,意思是允許接收來自遠程客戶端的連接。
手機配置
-
查看服務IP地址
在cmd
窗口輸入ipconfig /all
查看網絡信息,獲取當前電腦的IP地址,如下圖:
-
安裝證書
在手機瀏覽器訪問 192.168.1.105:8888,手機上下載Fiddler
證書,如下圖:
蘋果手機信任證書,設置->通用->描述文件
中,選中證書,添加信任即可。 -
wifi
配置代理
打開手機wifi
設置,進入配置代理,這裏主要添加服務器
、端口
這兩個信息,點擊保存即可。如下圖
注意:
- 確保手機和電腦是在同一個局域網,服務器即是運行
Fiddler
工具的那臺電腦的IP地址。 - 端口是上面設置
Fiddler
工具,Tools->optins..->Connections
頁籤中可看到,默認值爲8888
。
數據抓取
在手機上做任何操作,電腦端的 Fiddler
都顯示對應操作的請求,如下圖:
2.4 Fiddler 自定義規則
上面哪些配置都是基礎,接下來纔是重頭戲。Fiddler
的強大之處在於,它可以修改請求參數,響應數據,根據需要自定義規則。OnBeforeRequest
和 OnBeforeResponse
最常用的兩個方法。點擊Fiddler
菜單 Rules->Customize Rules...
就可以打開腳本工具了,這裏的腳本支持常用的 js
語法。
OnBeforeRequest
意思是在請求之前可以做的事情。這裏實現的功能是將網站請求頭信息寫入本地文件。代碼如下:
if (oSession.uriContains("mobile/wx/product/"))
{
var fso;
var file;
fileName = fileName + "_" + ucp;
fileName = fileName.replace(/\*/g,"");
var filePath="C:\\mntListen\\" + fileName + ".txt";
fso = new ActiveXObject("Scripting.FileSystemObject");
file = fso.OpenTextFile(filePath,2 ,true, false);
file.writeLine(" " + oSession.oRequest.headers);
file.close();
}
注:磁盤對應位置如果沒有文件路徑,需要提交手動創建。
OnBeforeResponse
意思是在報文響應前可以做的事情。這裏我的需求是對網站過濾,修改它的響應報文。
if (oSession.uriContains("mobile/wx/detail/v2"))
{
var body = oSession.GetResponseBodyAsString();
body = body.replace(/INVALID/g,"VALID");
body = body.replace(/title/g,"title1");
body = body.replace(/name/g,"title");
oSession.utilSetResponseBody(body);
file.close();
}
上面的這段代碼的意思是,當響應 url 鏈接包含 mobile/wx/detail/v2
,進行內容替換。
查看 Fiddler 手冊
打開 Fiddler
工具,右側有常用對象的使用方法,可快速查閱。
三、最後
花了差不多兩天時間,終於幫那位朋友解決了他的問題,還是挺有成就感的!中間也有想放棄的時候,最終和朋友的多次溝通,徹底理解需求後,才大功告成。最後我得出一個結論:在做項目開發時,首先需要理解客戶需求,才能針對需求尋找解決方案。如果你也在使用 Fiddler
工具的遇到問題,我們一起討論哈!
參考
- fiddler抓包詳解 :https://www.jianshu.com/p/1c57d8d1ad99