🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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,一条请求就发送出去了。 接着在会话列表就可以查看服务端的返回值。