抓包是Fiddler的最基本的应用,以本博客为例,启动Fiddler之后,在浏览器中输入http://blog.csdn.net/ohmygirl 键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示: #号列中的图标,每种图标代表不同的相应类型,具体的类型包括: 另外,注意请求的host字段。可以看到有来自多个www.csdn.net的子域名的响应,说明在大型网站的架构中,大多需要多个子域名,这些子域名可能是单独用于缓存静态资源的,也可能是专门负责媒体资源的,或者是专门负责数据统计的(如pingback)。
右键单击其中的一条请求。可以选择的操作有:save(保存请求的报文信息,可以是请求报文,可以是响应报文)。例如,我们保存的一条请求头信息如下: 不仅是单条session,Fiddler还支持保存所有抓取到的session(并支持导入),这对于抓取可疑请求然后保存,并在之后随时分析这些请求是很有帮助的。 如果想要重新发送某些请求,可以选中这些请求,然后点击工具栏中的reply就可以重新发送选中的这些请求。 左键点击单条HTTP请求,可以在右侧的tab面板中看到如下信息:
关于HTTP请求的性能和其他数据分析:
我们可以从中看出一些基本性能数据:如DNS解析的时间消耗是8ms,建立TCP/IP连接的时间消耗是8ms等等信息。
分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片,HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合HTTP标准的请求和响应头。Auth则可以查看授权Proxy-Authorization 和 Authorization的相关信息。Cookies标签可以看到请求的cookie和响应的set-cookie头信息。
主要是进行会话的拦截,然后替换原始资源的功能。他与手动修该reponse是一样的,只是更加方便了,可以创建相应的rules,适合批处理的重定向功能。
替换发出的请求。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文件或者得到的是Fiddler的内置响应。当勾选allow autoresponser 并设置相应的规则后(本例中的规则是将http://blog.csdn.net/ohmygirl的请求拦截到本地的文件layout.html),如下图所示: 然后在浏览器中访问http://blog.csdn.net/ohmygirl,得到的结果实际为: 这刚好是本地layout.html的内容,说明请求已经成功被拦截到本地.当然也可以使用Fiddler的内置响应。下图是Fiddler支持的拦截重定向的方式: 因此,如果要调试服务器的某个脚本文件,可以将该脚本拦截到本地,在本地修改完脚本之后,再修改服务器端的内容,这可以保证,尽量在真实的环境下去调试,从而最大限度的减少bug发生的可能性。不仅是单个url,Fiddler支持多种url匹配的方式: 字符匹配,如 example可以匹配 http://www.example.com和http://example.com.cn完全匹配,以EXACT开头表示完全匹配,如上边的例子EXACT:http://blog.csdn.net/ohmygirl正则表达式匹配,以regex: 开头,使用正则表达式来匹配URL,如:regex:(?insx).*.(css|js|php)$ 表示匹配所有以css,js,php结尾的请求url 替换服务器返回的数据 打开网站 https://www.zgzszzpt.com/op/bookStore/index在浏览器上打开开发者模式。可以在控制台上获取图书封面的链接。如 其中一本书的封面为https://www.zgzszzpt.com/material/eb43765a2090b8c6f33943628384f426.jpg然后打开fiddler ctrl+f 或者点击find 来查找这个请求 直接把这个链接复制到fiddler 的AutoResponder 上老版本的fiddler中叫request-builder.顾名思义,可以构建相应的请求,有两种常用的方式构建请求: (1)Parsed 输入请求的url之后executed即可,也可以修改相应的头信息(如添加常用的accept, host, referrer, cookie,cache-control等头部)后execute. 这个功能的常见应用是:“刷票”(不是火车票!!),如刷新页面的访问量(基于道德和安全原因,如果你真去刷票,刷访问量,本博客概不负责) (2)Raw。使用HTTP头部信息构建http请求。与上类似。不多叙述。
Composer界面 相关说明: 1)请求方式:点开可以勾选请求协议是get、post等; 2)url地址栏:输入请求的url地址; 3)请求头:第三块区域可以输入请求头信息; 4)请求body:post请求在此区域输入body信息; 5)执行:Execute按钮点击后就可以执行请求了; 6)http版本:可以勾选http版本; 7)请求历史:执行完成后会在右侧History区域生成历史记录。模拟get请求 1)在Composer区域地址栏输入Url地址; 2)选择get请求,点Execute执行,请求就可以发送成功啦; 3)请求发送成功后,左边会话框会生成一个会话记录,可以查看抓包详情; 4)右侧history区域会多一个历史请求记录; 5)会话框选中该记录,查看测试结果。 模拟post请求 1)请求类型勾选post; 2)url地址栏输入对应的请求地址; 3)body区域写登录的json参数; 4)header请求头区域,可以把前面抓包的数据copy过来。 (注意,有些请求如果请求头为空的话,会请求失败的) 5)执行成功和失败后的结果: 重复的并发测试 在拦截到的url上点击鼠标右键,->replay -> shift+reissue request 设置访问次数,比如100,然后点OK即可。Fiddler另一个比较强大的功能。Fiddler提供了多维度的过滤规则,足以满足日常开发调试的需求。如下图示:
**Use Filters ** : 是否使用过滤,只有在选择了这个选项以后才能修改下边的过滤条件,下边的过滤条件可以相互独立,也可以相互组合。**Actions ** :字面意思是动作的意思,也就是我们要做什么操作,里边包含有几个选项: Run Filterset now :马上执行过滤 Load Filterset: 加载本地过滤设置文件 Save Filterset :保存过滤条件到文件Hosts :host和zone过滤。 No Zone Filter :不通过空间进行过滤,分内网跟外网的 show only Intranet Hosts: 内网 show only internet Hosts:外网No Host Filter :不通过主机名进行过滤 Hide the following Hosts:隐藏下边输入的主机名的会话 show only the following Hosts:显示下边输入的主机名的会话 flag the following Hosts:标志下边输入的要过来的主机名的会话; 黑色粗体的就是过滤出来的。 4. Client Process:可以捕获指定进程的请求。根据客户端进程来进行过滤,选中 show only traffic from ,然后就可以选择要过来哪个进程的会话。 5. Request Headers: Show only if URL contains 和 Hide if URL contains 使用方法类似 功能相反。都是url中包含某些字符的filter,多种情况空格分隔。支持正则表达式和完全匹配,如下是个例子,可以简单理解为隐藏所有js和css请求。 6. Breakpoints: 这个功能点要介绍的细点,有两种方法设置断点:
fiddler菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。有两个断点位置: a. before response。也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据。 b.after response。也就是服务器响应之后,但是在Fiddler将响应中转给客户端之前。这时可以修改响应的结果。命令行下输入:Bpafter xxx或者bpv,bpu,bpm等设置断点。这种断点只针对特定类型的请求。命令行输入可以:bpu http://user.muxi.org/login1)当我们在这个里边设置了断点过滤,那么就会在相应的会话请求中插入断点,例如下边我在get 请求中插入断点。那么可以发现在执行get 请求的会话是红色的图标。 这个时候如果你要对其中某一条进行断点调试的话,那么就双击,然后就会显示这样一个界面: 这个界面中的按钮的功能 点击Break on Response 以后,你切换到下边的TextView选项卡里边,可以发现返回的数据,然后就可以进行修改。 7. **Response Status Code:**响应码过滤,就是隐藏相应状态码的会话,很简单,自己测试。 8. **Response Type and Size:**这部分是根据响应类型和大小的filter,前一半是显示隐藏的filter,后block的filter。block的filter也挺有意思,如果你选中了block css那么浏览器就加载不到css了。 9. **Response Headers:**是对response header的flag和修改。比较有用的是如果你想知道哪些请求修改了cookie那么就可以选中第一个checkbox。