布景:某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()方式,插进以下代码:
// 起首判定要求域名是不是是本身感乐趣的,和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 + " "; 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)。测试成果以下图所示。
