Fiddler高级用法—Fiddler Script抓取app网页json数据并保存

FiddlerScript

环境搭建

官网下载:
https://www.telerik.com/fiddler
安装步骤参照下面这篇文章(安装证书抓取https皆有详细步骤):
https://www.cnblogs.com/liulinghua90/p/9109282.html

简单Fiddler Script

如下展示了Fiddler在客户端与服务端进行交互时的位置,在客户端发起http请求及接收服务端返回的数据时都可截取交互的数据。那么在Fiddler中我们就可以抓取所有http请求的数据,甚至可以更改参数再请求到服务端!!

Fiddler的普通抓包分析将不再赘述,这里主要介绍Fiddler高级用法也就是通过修改Fiddler Script脚本文件来实现请求数据及返回数据的修改。
Fiddler Script在Rules->Customize Rules:

脚本中的主要方法说明:
static function OnBoot fiddler 启动时调用
static function OnShutdown fiddler关闭时调用
static function OnAttach fiddler注册成系统代理时调用
static function OnDetach fiddler 取消注册系统代理时调用
static function Main 在每次fiddler启动时和编译CustomRules.js 脚本时调用。
static function OnBeforeRequest(oSession: Session) 在这个方法中修改Request的内容
static function OnBeforeResponse(oSession: Session) 在这个方法中修改Response的内容(对应爬虫来说该方法最常用)

show you mine code

如下一段代码实现提取http请求返回的json数据保存至本地文件 并通过post请求发送至自己后台。
主要包含三大块:

  1. 解析response数据构造自身需要的json;
  2. 数据写入本地文件;
  3. 数据通过POST请求发送至后台保存mongodb
    static function OnBeforeResponse(oSession: Session) {
        if (m_Hide304s && oSession.responseCode == 304) {
            oSession["ui-hide"] = "true";
        }
        // if (oSession.fullUrl.Contains("baidu.com")){
        if (1){
            oSession.utilDecodeResponse();//消除保存的请求可能存在乱码的情况

            var jsonString = oSession.GetResponseBodyAsString();
            var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(jsonString);
            if((responseJSON.JSONObject=='System.Collections.ArrayList' || responseJSON.JSONObject=='System.Collections.Hashtable')&&jsonString!='[]'&&jsonString!='{}'){
                // 判断是否是json数据 然后保存

                var str='{}';//构造自己的JSON http请求的信息及返回的结果
                var data = Fiddler.WebFormats.JSON.JsonDecode(str);
                data.JSONObject["request_method"] = oSession.RequestMethod;
                var requestString = oSession.GetRequestBodyAsString();

                data.JSONObject["request_body"]= requestString;
                data.JSONObject["response_data"] = responseJSON.JSONObject;
                data.JSONObject["url"] = oSession.fullUrl;
                data.JSONObject["response_code"] = oSession.responseCode;
                jsonString = Fiddler.WebFormats.JSON.JsonEncode(data.JSONObject)

                // 保存文件到本地
                var fso;
                var file;
                fso = new ActiveXObject("Scripting.FileSystemObject");
                file = fso.OpenTextFile("E:\\spider_img\\Sessions.dat",8 ,true, true);
                file.writeLine(jsonString);
                file.writeLine("\n");
                file.close();

                // 数据通过post请求发送自己的后台服务保存
                FiddlerObject.log('2222222222222222'+jsonString);
                // methods
                var method = "POST";
                var myUrl = 'http://localhost:8000/fiddler'
                var url = myUrl+'?data='+Utilities.UrlEncode(jsonString);
                var protocol = "HTTP/1.1";
                var raw="";
                var selected: Session = oSession;
                raw += method + " " + url + " " + protocol + "\r\n";

                raw +="Host:localhost:8000\r\n";
                raw +="Connection: keep-alive\r\n";
                raw +="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n";
                raw +="User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36\r\n";
                raw +="Accept-Encoding: gzip,deflate,sdch\r\n";
                raw +="Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
                raw +="Content-Type: application/json\r\n";

                var body= "jsondata=''";
                raw += "\r\n" + body;
                FiddlerObject.utilIssueRequest(raw);
            }
        }

    }

测试抓取京东金融中银行类产品的存款利率

写入文件的json结果:

写在最后:

环境问题:

1.pc网页抓取暂无问题,参照上面的安装链接配置没有什么问题很容易成功。
2.app抓取问题:模拟器抓取会有很多app无法正常运行,可使用真机抓取。
3.https 403问题:手机安装证书后浏览器https抓取正常,但是部分app无法获取https链接,热心网友解决方法是使用JustTrustMe关闭ssl认证即可解决。但是我的小米6没有root成功无法安装 后来直接拿出老手机米4 android 6.x的系统便可直接抓取(老系统对爬虫比较友好),最后再root装个按键精灵就可以愉快的玩耍了。

Fiddler Script脚本问题:

JScript之前并没有了解过,写完上面的代码后也不怎么了解,反正代码里面有其他的代码 依葫芦画瓢嘛 而且感觉语法和JavaScript有很多相似的。
还有就是在类视图里去找相应的方法,虽然里面的解释不够详细 但是根据名称简单介绍就大概知道用途了(官网并未找到详细的说明文档,有了解的老兄可以留言交流)

原文地址:https://www.cnblogs.com/i-love-python/p/11505669.html

时间: 2024-10-06 01:19:42

Fiddler高级用法—Fiddler Script抓取app网页json数据并保存的相关文章

Python抓取HTML网页并以PDF保存

一.前言 今天介绍将HTML网页抓取下来,然后以PDF保存,废话不多说直接进入教程. 今天的例子以廖雪峰老师的Python教程网站为例:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 二.准备工作 PyPDF2的安装使用(用来合并PDF): PyPDF2版本:1.25.1 https://pypi.python.org/pypi/PyPDF2/1.25.1 或 https://g

iOS开发之抓取花瓣网json数据

最近在研究iPhone流水布局的实现,首先得有数据,所以我就随便在网上抓一些数据来实现.网上有很多网站是用瀑布流,比如蘑菇街,花瓣网,美丽说等等,今天就以花瓣网为例子,尝试去抓取里面我们想要的数据. 本来是我是想用objective-c的一个HTML开源框架hpple去解析花瓣网返回的html数据,提取里面我们想要的节点,但是我尝试了一下,实现不了,也听网上说这个框架不是很完善.所以我干脆用工具来实现了,网上有很多这样的工具,现在我先一个叫charles的http代理监听工具,它能够监听我们ht

Fiddler高级用法-设置断点

我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器.前面我们介绍了如何使用Fiddler进行抓包和分析,以及如何抓取APP上的数据包.这里我们介绍下如何修改请求和响应数据,也就是设置断点. 对request设置断点 1)通过菜单选项或快捷键F11进行设置,如图 当我们设置断点后,进行HTTP请求,数

Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试

之前在<关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享>中系统的介绍过 Fiddler 的原理与一些常见技巧,但那篇文章只是入门科普,并不深入,今天要介绍到的内容相对更加高级与深入,扩展性更好,功能更加强大. 1.Fiddler Script 1.1 Fiddler Script简介 在web前端开发的过程中,fiddler是最常使用的一款调试工具.在大多数情况下,通过fiddler默认菜单的功能就可以基本满足开发者的调试需求,然而如果需要满足更复杂的调试场景时,单纯通过fi

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

Java写的抓取任意网页中email地址的小程序

/* * 从网页中抓取邮箱地址 * 正则表达式:java.util.regex.Pattern * 1.定义好邮箱的正则表达式 * 2.对正则表达式预编译 * 3.对正则和网页中的邮箱格式进行匹配 * 4.找到匹配结果 * 5.通过网络程序,打通机器和互联网的一个网站的连接 */ import java.net.*; import java.util.regex.*; import java.io.*; public class EmailAddressFetch { public static

抓取扫描枪扫描数据的案例

背景: 最近要做一个抓取扫描枪扫描条形码获取条形码数据的功能,以前没有玩过扫描枪,但是因为做过很多其他方面的外设获取数据的项目,所以原理也明白,都是相当于键盘输入,所以相当的是通过获取键盘输入的方案实现,因为这个功能点是用于整个pc上所有扫描枪程序的数据的抓取,就是其他程序用扫描枪,我做的这个程序也能抓取到数据,并对数据进行相应的处理,至于数据处理那是后面自己所做的业务需求的处理了,和抓取扫描枪扫描数据无关了,所以可以通过全局键盘钩子抓取键盘的输入去实现,这样能够去获取每个键盘输入的值,想法有了

Python爬虫成长之路:抓取证券之星的股票数据

获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据.程序主要分为三个部分:网页源码的获取.所需内容的提取.所得结果的整理. 一.网页源码的获取 很多人喜欢用python爬虫的原因之一就是它容易上手.只需以下几行代码既可抓取大部分网页的源码. import urllib.request url='http://quote.stockstar

scrapy和selenium结合抓取动态网页

1.安装python (我用的是2.7版本的) 2.安装scrapy:   详情请参考 http://blog.csdn.net/wukaibo1986/article/details/8167590 (提示,能下载源码安装的就避免用pip install **) 安装过程中遇到python扩展问题”unable to find vcvarsall.bat“的解决办法: http://blog.csdn.net/ren911/article/details/6448696 3.安装seleniu