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只显示我们筛选的包。避免无效的请求打扰我们。

posted on 2016-06-01 15:26  XD大侠  阅读(4420)  评论(1编辑  收藏  举报

导航