Fiddler使用指南
Fiddler使用指南
简介
Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
既然是代理,也就是说:客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler然后发送到客户端。使用了Fiddler之后,web客户端和服务器的请求如下所示:
Fiddler界面简介
主界面包括几大块:菜单栏、session栏、右上的request栏和右下的response栏。主要讲一下session栏、request栏和response栏。
session栏
-
有11列。每一列的意思都比较好懂。
#
:http request的顺序,从1开始。
result:http响应状态码
protocol:请求使用的协议(如HTTP/HTTPS/FTP)
host:请求地址的域名
url:请求服务器的路径和文件名,包括GET参数
body:请求的大小,以byte为单位
caching:请求的缓存过期时间或缓存控制header等值
content-type:请求响应的类型
process:发出此请求的windows进程及进程ID
comments:用户通过脚本或者右键菜单给此session增加的备注
custom:用户通过脚本设置的自定义值 -
图标的意义
第一列的图标其实代表了各种不同的意义。
具体如下:
:response是HTML或者XML。有时候会发现返回值是json,但实际上也是这个图标,原因是返回值的Content-Type: text/html
:response是脚本文件
:response是css
- 保存抓包
request栏
这一栏包括statistics,inspector,autoresponder,composer,log,filters
-
statistics
这一栏主要是耗时和流量大小统计
统计选项卡的一些信息含义如下解释:
Request Count: 选中的session数;
Unique Hosts: 流量流向的独立目标主机数。如果所有选中的流量都发送到相同的服务器上,则不会显示该字段。
Bytes sent: HTTP请求头和请求体中向外发送的字节总数。后面括号中分别给出了头和body各自的字节数。
Bytes received: HTTP请求头和请求体中接收到的所有字节数。在全部计数后面的括号中给出了请求头和请求体各自的字节数。
Requests started at: Fiddler接收到的第一个请求的第一个字节的时间点。
Responses completed at: Fiddler发送到客户端的最后一个响应的最后一个字节的时间点。
Sequence(clock) duration: 第一个请求开始到最后一个响应结束之间的 “时钟时间”。
Aggregate session duration: 所有选中的session从请求到响应之间的时间的和。
DNS Lookup time: 所有选中的session解析DNS所花费的时间的总和。
TCP/IP Connect duration: 所有选中session建立TCP/IP连接所花费的时间总和。
HTTPS Handshake duration: 所有选中session在HTTPS握手上所花费的时间总和。
Response Codes: 选中session中各个HTTP响应码的计数。
Response Bytes by content-type: 选中session中响应的各个Content-Type的字节数。
Estimated Performance: 选中的流量在不同语种(local)地区和连接方式下所需时间的初步估计。 -
inspector
可以详细查看请求的 Headers、Cookies,并且可以对请求体格式化,以 WebForms、JSON、Raw 等方式查看。具体每种方式的区别可以自己感受一下。一般来说,想要查看请求的参数的话,WebForms 的方式就挺直观的。点击Raw就能看到原始的请求头部信息。 -
autoresponder
这个地方可以模拟服务端返回值。顾名思义,当浏览器发出的请求满足你设置的匹配条件的话,Fiddler 就自动响应了,并不需要走网络。 -
composer
模拟向服务端发送请求,用于测试服务端接口是否正确。
response栏
Headers:响应头。比如 Content-Type、Access-Control-Allow-Origin 等这些属性都在这个 tab 展示。
Cookies:查看由服务端带回来的 cookie。
JSON:将返回的内容以 JSON 格式显示。这个很有用,特别是当服务端返回的内容本身就是 JSON 的时候。
RAW:查看返回的原始数据
QuickExec
重点实在是因为它太有用了。它位于Fiddler左下角,有个 QuickExec 的提示,非常显眼。官网介绍
其实,当你看到它的时候,就已经会了第一个命令,输入时help
输入help
会带你到命令行的帮助页,上面列举了所有可用的命令。不是很多,而且都很直观。这里同样把常用的列一下。
?sometext
:高亮包含匹配文字的会话。比如 ?/foo 就可以把所有包含 /foo 的请求都找出来。
其他的高亮功能还有:=(匹配请求方法或状态码)、@(匹配host)、select(匹配MIME)。
clear
:清空会话面板。
keeponly
:清空会话面板,仅保留指定的MIME类型。比如 keeponly json
就能筛选出所有返回 json 的会话。
go
:放行所有的断点。
设置断点
按照之前介绍的,在状态栏启用断点(无论是请求断点,还是响应断点)后,所有的请求都会中断。
事实上,一个网页加载时,会触发很多异步请求。
而在上一节其实留了断点的命令行没有介绍。断点即 breakpoint
,所有跟断点相关的都是以 bp 为前缀。
bpu
:请求时断点,比如 bpu /foo
bpafter
:响应时断点,比如 bpafter /foo
bps
:拦截状态码,比如 bps 404
bpm
:拦截方法,比如 bpm post
用不带参数的命令可以清除断点,比如 bpafter 可以清除所有的响应断点。
url 的匹配方式是判断“字符串是否包含”,比如 bpu /foo 会拦截所有包含 /foo 的请求。
以上命令不带参数时,相当于去掉断点
如果忘了这些命令,在命令行输入 bp ,敲回车,就能看到提示了。bp is short for breakpoint,这个能记住吗?
模拟请求
右侧的 Composer 窗口可以模拟发送请求。
刚打开这个窗口的时候,应该是一片空白。你可以从左侧会话列表拖一个会话过去,这样就有预填的信息了,修改一下参数,点“Execute”,piu,一条请求就发送出去了。
接着在会话列表就可以查看服务端的返回值。前面有介绍
模拟返回值
想要模拟返回值,首先要设置响应断点。
bpafter qcssmd
当满足条件的响应回来时,选中该会话,就可以看到如图所示的面板。选择 Raw 视图(其他也可以,Raw 可以修改更多的内容),可以搜索XD大侠,发现有两个地方,我们发现第二个地方是
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/qcssmd/">XD大侠</a></h1>
然后我们修改XD大侠为XD大侠222,然后单击“Run to Completion”,就能把修改后的返回值送还给浏览器了。
还可以添加自动化:
选中想要拦截的请求,比如 http://www.cnblogs.com/qcssmd/
然后在 Request 面板选择 AutoResponder
再选择 “Add Rule”
在最下面的里面填你的返回内容的txt文件路径
然后 “Save”
此时会弹出一个对话框,跟 Response 面板的布局一样,在上面可以编辑返回值。
或者你直接把定义好的返回内容保存成文件,在刚才那个下拉框中选择该文件就行了。这里我是直接把改好的文件另存为txt文件,然后让他自动导向这里,然后运行,就会出现之前一样的结果。
Filter
假如我只关心某个域名下的抓包,其他的我都不在意。这时可以利用filter,让Fiddler只显示我们筛选的包。避免无效的请求打扰我们。