Fiddler 真的是一款相當不錯的數據包分析工具,從數據包截取,分析,改數據,可編程規則 等方方面面 真的可以說的上數一數二的好工具了。
本次事件的由來是由於在微信中很多推廣網站&頁面,都對微信&手機進行了識別,非微信&手機情況下,網頁不可訪問。
有朋友想獲取網頁內容和相關圖片所以拜托我來解決。仔細想了想這種情況,感覺沒有必要重頭編寫一個程序去模擬,因為要解決很多的問題,模擬手機、模擬微信,最麻煩的可能還要模擬的token 獲取過程。
而且受規則一旦發生變化,未來的代碼維護也變的不可預見的麻煩。
所以采用代理方式,讓終端正常操作,對流經的所有內容進行過濾,保存,效果應該最好。遵循這個思路,立刻就想到了 Fiddler。
(曾經用過Fiddler 幫朋友破解過直播網站免費看小視頻。-,.-! 好吧,我也看了~)
這里分享我用的Fiddler 4.6.3 中文漢化版 鏈接: https://pan.baidu.com/s/17F6s8hsMNdhSqXc7OeLnbQ 提取碼: jufr
可能會被提示有病毒,可以忽略誤該報提示。文件夾里還有 fiddlersyntaxsetup.exe 源碼編輯擴展的下載。(原版亞馬遜雲的下載需要咳血上網,另外好像這幾天咳血上網也無法下載)
大體解決思路為,利用Fiddler 的 規則-> 自定義規則 (c#代碼)來實現對內容的分析、過濾、保存過程。
1、打開Fiddler ,找到 規則(Rules)-> 自定義規則(Customize Rules) 打開 規則代碼。
2、定位並找到 static function OnDone(oSession: Session) 處。(該部分代碼默認情況下是注釋狀態,)
移除注釋,在其中編寫代碼如下:
static function OnDone(oSession: Session) {
//檢查Content-Type
if (oSession.ResponseHeaders["Content-Type"]!=null || oSession.ResponseHeaders["content-type"]!=null) { //避免不規范標頭 var contentType=oSession.ResponseHeaders["Content-Type"]; if (String.IsNullOrEmpty(contentType) ) contentType=oSession.ResponseHeaders["content-type"]; //判定請求是否圖片 if (contentType.Contains("image")) { //確定文件名(保存用) var fileName=""; var fileIndex = oSession.RequestHeaders.RequestPath.LastIndexOf ("/"); if (fileIndex>0) fileName = oSession.RequestHeaders.RequestPath.Substring (fileIndex+1); //如果文件名非法(名稱含非法字符) if(fileName.IndexOf('?')>0 || fileName.IndexOf('&') ) fileName=String.Empty; //輸出日志(在Fiddler 主窗口,日志處輸出) //FiddlerObject.log("Content-Type:"+ contentType +" RequestPath:"+oSession.RequestHeaders.RequestPath); //如果文件名為Null,自行創建一個文件名(Guid) if (String.IsNullOrEmpty( fileName)) { fileName=Guid.NewGuid().ToString(); var extName= contentType.Replace("image/",""); fileName=fileName+"."+extName; } //太小的圖片不要,比如站位圖片(自行調節) if (oSession.ResponseBody.Length>100) { //指定保存位置 var saveDir="d:\\Temp\\"; //不存在則創建文件夾 if (!System.IO.Directory.Exists(saveDir)) System.IO.Directory.CreateDirectory(saveDir); //保存響應流 oSession.SaveResponseBody(saveDir+fileName); //寫日志 FiddlerObject.log("[文件保存]:"+fileName) } } } }
我寫代碼一般備注比較多,所以在此不再贅述。
保存后,Fiddler 會自動加載並應用此規則。
自此,本機或通過代理過來的 訪問中如果有圖片的,均會自動保存在d:\temp 文件夾下。
不過微信和不少網站都需要https 連接,默認情況下,代理會出現證書問題,需要配置相關的根證書。
關於Fiddler 如何配置HTTPS 和如何配置代理,請參考我另外一篇博文。
