標籤:java javascrip 今天 asc ESS contain icon weight 多次
本文原創鯤之鵬(http://www.site-digger.com)
本文原始連結:http://www.site-digger.com/html/articles/20170810/137.html
背景:某App的token有時效性,大概生命週期只有一小時。因此爬蟲中不能使用一個固定的token去抓資料,必須要定時擷取新的token值。但token的產生過程複雜難以直接實現。
鯤之鵬的技術人員經過研究,最後採用了“曲線救國”的方法,通過程式類比操作App(啟動),定時產生新的token,然後利用Fiddler2捕獲這個token並記錄到指定檔案中(爬蟲定時讀取這個檔案擷取新的token)。
用Fiddler2捕獲App的資料包這個方法在我們之前的文章裡已經多次提到,如果你還不熟悉,可以看看這裡http://www.site-digger.com/html/articles/20170116/134.html。今天我們重點講的是如何讓Fiddler2自動將捕獲到的特定參數記錄到指定檔案中去。
這要歸功於Fiddler2的Custom Rules功能,我們可以在Custom Rules中添加指令碼(JavaScript)來實現自訂的功能。官網範例文件:http://docs.telerik.com/fiddler/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse。
具體操作步驟如下:
第一步:啟動Fiddler ScriptEditor。"功能表列Rules -> Customize Rules...."如所示:
第二步:找到OnBeforeRequest()方法,插入如下代碼:
view plaincopy to clipboardprint?
// 首先判斷請求網域名稱是否是自己感興趣的,以及URL中是否含有自己感興趣的特徵字串。如果是,則將該請求的URL和QueryString記錄到記錄檔 "c:/fiddler-token.log"中。
if (oSession.HostnameIs("某網域名稱") && oSession.uriContains("特徵字串")){
var filename = "c:/fiddler-token.log";
var curDate = new Date();
var logContent = "[" + curDate.toLocaleString() + "] " + oSession.PathAndQuery + "\r\n";
var sw : System.IO.StreamWriter;
if (System.IO.File.Exists(filename)){
sw = System.IO.File.AppendText(filename);
sw.Write(logContent);
}
else{
sw = System.IO.File.CreateText(filename);
sw.Write(logContent);
}
sw.Close();
sw.Dispose();
}
第三步:儲存指令碼並測試(儲存後立即生效,無需重啟Fiddler)。測試結果如所示。
說明:該文章為鯤之鵬(http://www.site-digger.com)原創文章 ,您除了可以發表評論外,還可以轉載到別的網站,但是請保留源地址,謝謝!!(尊重他人勞動,我們共同努力)
利用Fiddler2的Custom Rules自動抓取App的TOKEN並記錄到檔案