利用Fiddler2的Custom Rules自动抓取App的TOKEN并记录到文件

本文原创作者:鲲之鹏(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?

  1. // 首先判断请求域名是否是自己感兴趣的,以及URL中是否含有自己感兴趣的特征字符串。如果是,则将该请求的URL和QueryString记录到日志文件 "c:/fiddler-token.log"中。  

  2. if (oSession.HostnameIs("某域名") && oSession.uriContains("特征字符串")){  

  3.         var filename = "c:/fiddler-token.log";  

  4.         var curDate = new Date();  

  5.         var logContent =  "[" + curDate.toLocaleString() + "] " + oSession.PathAndQuery + "\r\n";  

  6.         var sw : System.IO.StreamWriter;  

  7.         if (System.IO.File.Exists(filename)){  

  8.                 sw = System.IO.File.AppendText(filename);  

  9.                 sw.Write(logContent);  

  10.         }  

  11.         else{  

  12.                 sw = System.IO.File.CreateText(filename);  

  13.                 sw.Write(logContent);  

  14.         }  

  15.         sw.Close();  

  16.         sw.Dispose();  

  17. }  

第三步:保存脚本并测试(保存后立即生效,无需重启Fiddler)。测试结果如下图所示。


说明:该文章为鲲之鹏(http://www.site-digger.com)原创文章 ,您除了可以发表评论外,还可以转载到别的网站,但是请保留源地址,谢谢!!(尊重他人劳动,我们共同努力)


猜你喜欢

转载自blog.51cto.com/xiankunzhipeng/2151253