Fiddler简介
1、什么是Fiddler?
Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一。它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
2、Fiddler使用界面简介
Fiddler主界面的布局如下:
主界面中主要包括四个常用的块:
1.Fiddler的菜单栏,上图绿色部分。包括捕获http请求,停止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。
2.Fiddler的工具栏,上图红色部分。包括Fiddler针对当前view的操作(暂停,清除session,decode模式、清除缓存等)。
3.webSession面板,上图黄色区域,主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url,协议,状态码,body等信息,详细的字段含义如下图所示:
4.详情和数据统计面板。针对每条http请求的具体统计(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)和数据包分析。如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息:
inspector面板
Statistics信息
1 中的框含义是:请求总数,请求包大小,响应包大小。
2 中的框含义是:请求的起始时间,响应结束时间,等待时间,握手时间,路由时间,TCP/IP传输时间。
3中的含义是:返回各种类型数据大小统计
Composer选项卡
而composer面板下,则可以模拟向相应的服务器发送数据的过程(不错,这就是灌水机器人的基本原理,也可以是部分http flood的一种方式)。
Composer选项卡支持手动构建和发送HTTP,HTTPS和FTP请求,我们还可以从web session列表中拖曳session,把它放到composer选项卡中,当我们点击Execute按钮,把请求发送到服务器端。
Composer选项卡是由4个子选项卡组成的,如下所示:
其中Scratchpad选项卡不用的;
我们先来看看Options选项卡中 Request Options的复选框中的含义如下:
Inspect Session 请求执行后,Inspectors选项卡会被激活,可以查看请求结果。
Fix Content-Length header* 该选项控制Composer是否会自动添加或修改Content-Length请求头,表示请求体的大小。在很多情况下,缺少适当的Content-Length头的请求会导致http请求响应出错。
Follow Redirects* 该选项控制Composer是否会自动使用响应的Location头,遵循HTTP/3xx重定向,如果选中该选项,Composer在失败之前最多会执行10次重定向。
Automatically Authenticate* 该选项控制composer是否会自动响应服务器的HTTP/401或HTTP/407认证需求。
Tear off button 该按钮会从主Fiddler窗口删除Composer,并把它作为独立的悬浮窗口打开。如果选中Inspect Session选项,该选项就非常有用,因为它支持同时查看Composer和Inspector选项卡;如下所示:
上面的以*标示的选项只适用于使用Parsed选项卡发送的请求,从Raw选项卡发送的请求不支持这些选项。
Composer使用场景如下:
比如我们开发想测试post请求接口,我们都知道浏览器请求只能是get请求,所以无法使用浏览器来测试,因此我们可以使用Composer构造post请求,点击execute发送请求。
也可以粘贴一次请求的raw http headers,达到模拟请求的目的:
Filter标签
可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求:
1、是否启用filters。
2、我们可以维护多套filters,在不同的情形下加载不同的filter,在Actions中可以把当前的filter保存起来,也可以加载以前保存的filter。
3、根据主机名信息的filter。其中第一个下拉框是只显示内网或者外网选项。
另一个是下拉框结合它下面的输入框来完成根据主机名信息显示或者隐藏或者标记指定请求,如下图。
下图是一个例子,可以简单理解为隐藏对本机的请求。
4、根据进程信息的filter,第一个checkbox选上就可以选择进程了,那么fiddler将只显示该进程发出的请求,如下图。另外两个一个是指关心IE,另一个是隐藏来自service host的请求。
5、根据request header的filter。这个可能是我觉得比较有用的一块儿了。
Show only if URL contains 和Hide if URL contains 使用方法类似 功能相反。都是url中包含某些字符的filter,多种情况空格分隔。支持正则表达式和完全匹配,如下是个例子,可以简单理解为隐藏所有js和css请求。
6、这个部分是各种各样的断点,大家应该知道fiddler是有断点功能的,可以在请求发送时断住,之后修改请求,再发送。当然也可以在响应的时候断住,做修改。而且fiddler还可以模拟响应,根本不发送给server端,在项目开发阶段,server端没有准备好API这个就特别有用了,或者用了复现一些问题。
断点选项框支持对包含给定属性的请求或响应设置断点;
Break request on POST选项含义是:会为所有POST请求设置断点;
Break request on GET with query string的含义是:会为所有方法为GET且URL中包含了给定查询条件的请求设置断点。
Break on XMLHttpRequest的含义是:对所有能够确定是通过XMLHTTPRequest对象发送的请求设置断点,由于从数据流上无法判断该请求是否通过XMLHTTPRequest对象发送,因此该方法是通过查找请求头是否为X-Requested-With实现的。
Break response on Content-Type选项的含义是:会为所有响应头Content-Type中包含了指定文本的响应设置响应断点。
7、如果server端的响应代码属于或者不属于哪一类就隐藏,比较简单。
基于响应状态码来过滤session;含义如下:
Hide success(2xx)的含义是:会隐藏状态码在200到299之间(包含200和299)的响应。
Hide non-2xx的含义是:会隐藏状态码不在200到299之间的响应。
Hide Authentication demands(401,407)的含义是:会隐藏状态码是401和407的响应,这些响应需要用户进一步确认证书。
Hide redirects的含义是:会隐藏对请求进行重定向的响应。
Hide Not Modified(304) 会隐藏状态条件中状态码为304的响应。
8、这部分是根据响应类型和大小的filter,前一半是显示隐藏的filter,后block的filter。block的filter也挺有意思,如果你选中了block css那么浏览器就加载不到css了。
Show all Content-Types的含义是 不过滤;
Show only IMAGE/* 的含义是 显示Content-Type头是图像类型的Session。
Show only HTML 的含义是 隐藏Content-Type头不是HTML类型的Session。
Show only Text/css 含义是 隐藏Content-Type头不是text/css类型的Session。
Show only Scripts 含义是 隐藏Content-Type头不是Scripts类型的Session。
Show only xml 含义是 隐藏Content-Type头不是xml类型的Session。
Show only JSON 含义是 隐藏Content-Type头不是JSON类型的Session。
Hide IMAGE/* 含义是 隐藏Content-Type头不是图像类型的Session。
Hide smaller than选项隐藏响应体小于指定的字节数的响应。
Hide larger than选项隐藏响应体大于指定字节数的响应。
Time HeatMap复选框会基于服务器返回给定响应所需要的时间为每个session设置背景颜色。
9、是对response header的flag和修改。比较有用的是如果你想知道哪些请求修改了cookie那么就可以选中第一个checkbox。
3、Fiddler抓取HTTP请求
抓包是Fiddler的最基本的应用,以泰然金融网站为例,启动Fiddler之后,在浏览器中输入http://jr.trc.com/键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示:
每种图标代表不同的相应类型,具体的类型包括:
点击单条HTTP请求,可以在右侧的tab面板中看到如下信息:
断点调试-断点Breakpoints
Fiddler提供了断点调式功能,session在执行过程中,有2个可能执行中断的时间点;
- 从客户端读到请求后,在请求被发送到服务器端之前。
- 在服务器端返回响应之后,在响应返回客户端之前。
当程序在请求中断点停止执行时,你可以任意修改该请求,包括URL,headers或body,我们还可以不发送该请求到服务器端,我们可以直接自定义数据返回给客户端,同样,当程序在响应断点停止执行时,我们也可以任意修改响应的内容,包括headers或body。我们先来操作一下如下:
菜单栏 Rules –》 Automatic Breakpoints –》 Before Requests(请求被发送到服务器端之前);或者 After Responses(响应返回客户端之前)
我们在Inspectors –》WebForms选项卡中可以看到请求中携带的参数如上,我们可以任意修改参数名值对,我们也可以任意添加参数,或者增加cookies或者headers等等,现在我们来看看浏览器中请求响应了没有?如下所示:
现在我们可以再点击黄色小图标 Break on Response 小按钮,如下所示:
可以看到,请求直接返回数据,现在黄色小图标是不能点击的按钮,现在我们可以来修改响应的内容,模拟请求返回,我们也可以自定义返回的json数据,或者我们以后来模拟get或者post请求,我们不需要服务器端(比如php)返回对应JSON数据,我们完全可以使用Fiddler来模拟数据,发送一个空的请求,然后使用fiddler来截取,自己自定义返回json数据,我们可以自定义返回的数据,如下所示,我是修改返回的内容如下所示:
当我们点击Run to Completion按钮后,在浏览器端可以响应数据,接着如下:
当然我们可以在filters里面的选项勾选也可以进行调式如下:
请求重定向(autoResponder)
所谓请求在我们前端就是一些基本的css,js,图片等请求,重定向是指页面请求资源文件替换成其他需要替换成的文件。
比如我们现在需要调式线上一个js或者css文件等,我们可以使用fiddler捕获这个文件的请求,然后复制线上一份文件(比如JS或者css)代码放到本地,然后在本地的文件(JS或者css)修改完后,替换线上的文件来调式,当一切都好了话,我们可以直接把代码提交到服务器上即可;如下所示:
如上:Enable automaticresponses复选框的含义是:控制是否激活AutoResponder选项卡,如果没有选中该选项,选项卡上的其他选项就不可选。
Unmatched requests passthrough 复选框的含义是: 如果选中该选项,不匹配的请求会正常发送到服务器,如果没有选中该选项,Fiddler会为所有和该规则完全不匹配的HTTP请求生成HTTP/404 Not Found响应,比如我现在不勾选它;如下所示:
Enable Latency的含义是:控制匹配某个规则的请求时立即执行,还是延迟Latency字段中所指定的毫秒数。如果没有选中该选项,Latency字段就不会显示,使用这个选项可以更准确地模拟现实中的服务器响应,取消该选项可以提升性能。如下所示:
我们也可以点击右键进行毫秒数设置它,如下:
在下方的Rule Editor选项卡中可以调整上面的请求替换,如下:
第一个下拉框是指 需要替换的文件,第二个下拉框a.js是替换上面的下拉框的文件;当然我们不一定要这样替换,如果我们正则非常好的话,我们可以使用正则替换需要替换的文件。当我们点击 save后即可替换。
Stave是一个Fiddler扩展插件,让Fiddler能将URL映射到本地目录,实现批量文件自动响应。
其他设置
https协议的抓包
远程客户端的代理配置
DNS解析
Tools->HOST