Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展
你对HTTP 协议越了解, 你就能越掌握Fiddler的使用方法。你越使用Fiddler,就越能帮助你了解HTTP协议。
Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。
下载地址:https://www.telerik.com/download/fiddler
* * * * *
**Fiddler的工作原理**
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。
当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。
不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。
Fiddler,它能够在本机和服务端之间建立一个代理,通过这个代理,可以对所有经过的请求和响应进行拦截、修改、分析等。
理论上说,只要你使用的软件支持代理,都可以用 Fiddler进行拦截,包括浏览器、命令行等。类似的软件有很多,比如 WireShark、HttpWatch 等
**Fiddler 如何捕获Firefox的会话**
能支持HTTP代理的任意程序的数据包都能被Fiddler嗅探到,Fiddler的运行机制其实就是本机上监听8888端口的HTTP代理。
Fiddler2启动的时候默认IE的代理设为了127.0.0.1:8888,而其他浏览器是需要手动设置的,所以将Firefox的代理改为127.0.0.1:8888就可以监听数据了。
Firefox 上通过如下步骤设置代理
> 点击: Tools -> Options, 在Options 对话框上点击Advanced tab - > network tab -> setting.
默认下,Fiddler不会捕获HTTPS会话,需要你设置下, 打开Fiddler Tool->Fiddler Options->HTTPS tab
* * * * *
:-: **基本术语**
**Session:会话**
不同于服务端的 Session,这里仅仅指一次HTTP请求而已
状态栏断点有三种选择:
~~~
1、在请求发出之前进行断点;
2、在响应回来的时候进行断点;
3、不设断点。
~~~
**审查(Inspector):**
随便单击一条会话,右侧就会显示详细信息。
这里有上下两栏,上面是 Request,下面是 Response。
**Request (请求)中有三个比较厉害的:**
> Inspectors:选中之后,可以详细查看请求的 Headers、Cookies,并且可以对请求体格式化,以WebForms、JSON、Raw 等方式查看。
> 具体每种方式的区别可以自己感受一下。
> 一般来说,想要查看请求的参数的话,WebForms 的方式就挺直观的。
> AutoResponder:这个地方可以模拟服务端返回值。
> 顾名思义,当浏览器发出的请求满足你设置的匹配条件的话,Fiddler 就自动响应了,并不需要走网络。
> Composer:模拟向服务端发送请求,用于测试服务端接口是否正确。
**Response (响应)中常用的三个:**
> Headers:响应头。比如 Content-Type、Access-Control-Allow-Origin 等这些属性都在这个 tab 展示。
> Cookies:查看由服务端带回来的 cookie。
> JSON:将返回的内容以 JSON 格式显示。这个很有用,特别是当服务端返回的内容本身就是 JSON 的时候。
**QuickExec**
抱歉这么快就要讲命令行,实在是因为它太有用了。
它位于状态栏的上方,有个 QuickExec 的提示,非常显眼。
> ?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` ,敲回车,就能看到提示了。
**模拟返回值**
想要模拟返回值,首先要设置响应断点。
`bpafter /foo`
当满足条件的响应回来时,选中该会话,就可以看图示的面板。
选择 Raw 视图(其他也可以,Raw 可以修改更多的内容),然后可以清楚地看到,
服务端返回的内容是`{name: 'Jarvis', gender: 'M'}`
把上面的 M 修改成 F,然后单击“Run to Completion”,就能把修改后的返回值送还给浏览器了。
自动化呢?没错,人往往喜欢偷懒,如果每次要修改,岂不是很麻烦。
> 选中想要拦截的请求,比如 `/api/foo`
> 然后在 Request 面板选择 AutoResponder
> 再选择 “Add Rule”
> 在最下面的下拉框选择 “Create New Response...”
> 然后 “Save”
此时会弹出一个对话框,跟 Response 面板的布局一样,在上面可以编辑返回值。
或者你直接把定义好的返回内容保存成文件,在刚才那个下拉框中选择该文件就行了。
**模拟请求**
右侧的 Composer 窗口可以模拟发送请求,刚打开这个窗口的时候,应该是一片空白。
你可以从左侧会话列表拖一个会话过去,这样就有预填的信息了,修改一下参数,点“Execute”,piu,一条请求就发送出去了。
接着在会话列表就可以查看服务端的返回值。