原文链接:http://www.yyztech.com/archives/50/
如果你是一名前端开发或者测试人员,那么fiddler绝对是最值得掌握的工具之一。fiddler是最强大的web调试工具之一,他能记录所有客户端和服务器的http/https请求以及响应,允许你监视,允许你设置断点调试,甚至篡改请求和响应。
fiddler的工作原理是什么呢?其实,每当打开fiddler的时候,它就会自动在你的电脑上把“127.0.0.1:8888”设置为代理服务器,并且fiddler会一直监听8888端口,这样的话,你的电脑上所有的请求或者响应,都会经过这个代理服务器,了解了这个就好办了。
所以,这次就让我们来一起看下fiddler有哪些好用的功能,这些功能都能满足什么样场景下的使用。
注意:本教程认为您已经对fiddler有了基本的了解,了解fiddler各个窗口代表的含义。如果您之前没有使用过fiddler,请在网上查询任何一篇文章,介绍的已经很详细了。
一、篡改请求
在测试时,你一定会遇到这样的情况,请看下面的表单(使用“http://ip.360.cn/#/ipquery”网页进行说明):
这个表单我现在输入了一个错误的ip地址,结果前端就已经抛出了ip地址错误的问题,限制我点击“查询”按钮,但我还就想知道当前端不做限制时,直接给服务端提交一个错误的ip,看看服务端能不能处理,那我该怎么办呢?
用fiddler。首先打开fiddler,选中Rules->Automatic Breakpoints->Before Requests,或者直接点击fiddler左下角,直到出现红色的向上箭头(表示请求过程中设置了断点,客户端发出的请求被fiddler拦截了),如下图:
然后,我们把表单改成正常的ip地址如“202.106.212.255”,然后点击查询。
查询后发现页面没有响应,这时候看fiddler,发现ip.360.cn/IPQuery/ipquery这个请求的签名也有一个红色的上传箭头,表示我们已经成功拦截了这个请求。这时候,我们在左侧点击这个请求,在右侧Inspectors->TextView或者Inspectors->WebForms界面下会看到请求发送的具体内容:
我们点击红框标注的value地方,把ip修改成“202.106.212.256”,然后点击另一个红框标注的“Run to Completion”,这时候可以看刚才的页面了:
这时候我们就可以说,不仅前端,原来服务端对ip地址也是有校验的。
刚才可能细心的同学会注意到,在fiddler的“Run to Completion”按钮的左边,还有一个按钮叫“Break on Response”,这个按钮是干什么的呢?顾名思义,刚才的“Run to Completion”指的是直接运行到这个session结束,而“Break on Response”是指在返回时再次截获返回数据。
好了,这就是基本的篡改请求的小例子,希望大家看了后可以在工作中用到。
可能有同学会问了,你这样操作,直接截获了所有的请求,如果我只需要截获一个特定请求,而其他请求我都放行,这该怎么办呢?这就属于fiddler的命令行高级用法了,先透漏一下,使用bpu命令就可以,后续我们再介绍。
二、篡改返回
刚才咱们篡改的是请求内容,那能不能篡改返回内容呢?比如说,刚才ip查询输入框的下面是它的返回,标明了这个ip的地址以及运营商,那如果我想构造一个很长的返回,用来看看当返回数据很长时前端页面会不会变形呢?
还用刚才的例子,我们先把fiddler设置成这样:选中Rules->Automatic Breakpoints->After Responses,或者点击fiddler左下角,直到出现向下的红色箭头(向下箭头表示返回过程中被fiddler拦截),如下:
然后,我们提交一个正常的ip,如“202.106.212.255”,然后点击查询。
现在,前端页面仍然没有响应,这时候我们打开fiddler,看到了这个请求的返回值如下:
可以看到,返回的是一个json数据结构,其中的data的值就是要显示在页面上的数据。我们修改下这个data值如下:
修改后点击“Run to Completion”,然后查看前端页面:
发现前端页面把我返回的很长的数据给截断显示了。
以上就是篡改返回的一个小例子,同样希望读者能用到实际工作中。
可能有同学又会问了,你这样操作,直接截获了所有的返回,如果我只需要截获一个特返回,而其他返回我都放行,这该怎么办呢?这又属于fiddler的命令行高级用法了,再透漏一下,使用bpafter命令就可以,后续我们再介绍。