相信app开发很多时候,都是等后台出接口,拿到数据调试错误。殊不知,我们完全可以不用等,只要有约定好的接口定义文档,借助工具就能做到,自己模拟数据返回~
下面主要是在项目组开发过程中,使用Fidder,摸索总结的经验之谈.
一、初步介绍及前期准备
1、抓包工具简介
抓包工具有很多,以下列一下最常用的几个工具别简单介绍下
firebug:web最常用的调试工具,但是对于分析http请求的详细信息,不够强大。模拟http请求的功能也不够,且firebug常常是需要“无刷新修改”,如果刷新了页面,所有的修改都不会保存。
Wireshark:通用的抓包工具,比fiddler更强大,消息量更多,比如在验证反作弊信息的时候,反作弊pingback信息的消息用fiddler就没抓到,用wireshark就抓到了。
fiddler:HttpWatch 和 Firebug绝大多数前端开发人员都比较熟悉,但是HttpWatch虽然可以抓到每个 HTTP 请求的全部数据,但无法修改返回的数据;尽管Firebug可以修改 HTML和CSS,但是在调试CGI接口时无法干预HTTP请求的参数值和CGI返回的数据。而 Fiddler作一个 HTTP 调试代理,不但能够记录客户端同服务器之间的所有 HTTP 通讯数据,还能够修改请求数据和返回数据,也叫做“构造请求”和“模拟响应”。除此之外, 添加了willow插件的Fiddler 还可以:统计数据包、修改Host、请求重定向、编码转换、低网速模拟、断点调试以及过滤HTTP请求…Fiddler包含了一个强大的基于事件脚本的子系统,并且能够使用.net框架语言扩展
2、下载
根据.netframework 2.0 或 4.0版本下载fiddler2或fiddler4
可以直接百度进行下载,或者上官网下载:http://fiddler2.com/get-fiddler
安装:I Agree->Install
3、配置抓取https
Tools->Fiddler Options->HTTPS选项卡->勾选“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”前面的复选框,然后点击“OK”
勾选后就可监听到https的请求和响应了
PS:Decrypt HTTPS traffic是解密https流量的意思,勾选后可以查看https内容,如果证书不会导的话,可能会导致部分应用无法连接、部分图片无法显示的问题
4、配置允许远程连接
Tools -> Fiddler Options-> Connections选项卡,选中“Allow remote computers to connect”前面的复选框,然后点击“OK”
设置后,就可以监听设置过代理的手机了,注意,设置后需重启Fiddler才生效
5、手机设置代理,
本机的IP可以通过cmd命令的ipconfig获取本机IP,或者直接将鼠标悬停在Online上(小屏幕时Online会被收起来),如下图(手机和电脑最好是同一wifi或同一网段)
不需要非得本机开热点才能连接,只需要手机和安装 Fiddler 电脑在同一WIFI下,手机连接到WIFI。不同的手机设置有所区别,以我的努比亚手机/iphone6p为例,注意,fiddler的默认端口是8888,不是8080
设置好后可以随意打开几个APP,看看连接是否抓到,没抓到很可能就是你刚才设置的代理没保存
6、安装fiddlerroot证书(安装证书后就能抓到大部分https的内容)
在手机浏览器中输入ip:8888,如下图,点击最下方的蓝字FiddlerRoot certificate(注:手机未设置锁屏密码时会让你先去设置密码)
二、界面介绍
1、fiddler中各种图标的含义
2、抓包是Fiddler的最基本的应用,
以本博客为例,启动Fiddler之后,在浏览器中输入http://www.cnblogs.com/cingchen 键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示:
另外,注意请求的host字段。可以看到有来自多个api.ad.cnblogs.com的子域名的响应,说明在大型网站的架构中,大多需要多个子域名,这些子域名可能是单独用于缓存静态资源的,也可能是专门负责媒体资源的,或者是专门负责数据统计的
2、Fiddler主界面的布局如下:
主界面中主要包括四个常用的块:
1.Fiddler的菜单栏,上图绿色部分。包括捕获http请求,停止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。
2.Fiddler的工具栏,上图红色部分。包括Fiddler针对当前view的操作(暂停,清除session,decode模式、清除缓存等)。
3.web Session面板,上图黄色区域,主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url,协议,状态码,body等信息,详细的字段含义如下图所示:
4.详情和数据统计面板。
针对每条http请求的具体统计(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时 间)和数据包分析。如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报 文的信息:
而composer面板下,则可以模拟向相应的服务器发送数据的过程(不错,这就是灌水机器人的基本原理,也可以是部分http flood的一种方式)。
也可以粘贴一次请求的raw http headers,达到模拟请求的目的:
Filter标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求:
更多的过滤器规则需要一步一步去挖掘。
三、常用功能介绍
1、更改host
fiddler可以直接更改host,不需要重启手机就可立即生效,而且对IOS也是支持的,可以在正式环境/测试环境来回切换,非常方便
Tools->HOSTS...
2、模拟弱网环境,限速
Rules → Performances → Simulate Modem Speeds。勾选之后,你会发现你的网路瞬间慢下来了很多。至于慢下来后网络速度是多少,则由CustomRules.js 中如下程序控制的(Ctrl+R):
...
var m_SimulateModem: boolean = true;
...
if (m_SimulateModem) {
// Delay sends by 500ms per KB uploaded.
oSession["request-trickle-delay"] = "500";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "150";
}
...
算法就是 1000/下载速度 = 需要delay的时间(毫秒),比如50kB/s 需要delay20毫秒来接收数据,所以根据你需要的网络速度来修改上述值。
【注】:存档之后,原本已经勾选的Simulate Modem Speeds 会被取消勾选,需要再到Rules → Performances → Simulate Modem Speeds 勾选,同时需要注意一定要禁用浏览器代理插件,以及修改完成后重启浏览器才能生效。
3、打断点(会将所有的请求打断点)
Before Requests F11 修改请求数据
After Responses Alt+F11 修改响应结果
Break On Response 点击后会在响应的地方打断点
Run To Completion 修改后点击运行,将修改后的数据进行请求/返回
4、composer 模拟请求
可以模拟所有的http请求,具体的参数可以在raw里面写,写完后点击Execute进行执行模拟请求
5、AutoResponder 自动响应
可以精确的对抓到的数据进行处理,比如打断点(*bpu/*bpafter),直接返回写好的返回值(find a file...)等
6、TestWizard 转码
7、Replay 重新模拟个一样的请求,Shift+左键可以生成N个一样的请求,可用于简单的压力测试
8、快捷命令 (Alt+Q可直接focus到命令行)
请求断点:bpu 192.168.0.1
清除请求断点:bpu
响应断点:bpafter 192.168.0.1
清除响应断点:bpafter
停止/开始抓本地请求:stop/start
替换请求地址:urlreplace www.zhuaqianmao.com 121.41.58.3(将zhuaqianmao的请求替换为58.3)
放开所有断点:go/g
选择所有该host的请求:@118.178.168.129
所有请求类型为xxx进行断点:bpv(bpm) xxx(如post/get)
清除所有请求:clear/cls
退出fiddler:quit
更多命令可参考:http://www.xuanfengge.com/fiddler2-shortcut-command-tutorial-translation.html
9、更改UA ,可以设置所有请求默认的User-Agent