1.简介

Fiddler有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点。设置断点后,开始拦截接下来所有网页,直到取消断点。这个功能可以在数据包发送之前,修改请求参数;在收到应答包,在js解析和浏览器渲染之前,修改返回结果。有了这个功能,开发者就可以修改不同参数测试server,同时也可以修改返回包测试自己的js函数,或测试页面渲染。使用者功能要用到fiddler的命令行。因为这个菜单里面是中断所有的请求

2.为什么要打断点呢?

2.1开发人员

对于一些大厂的程序猿,他们的分工是非常明确的。前端程序员和服务器程序员是分工合作的。前端程序员想要调试Ajax请求的功能,这样便不必等待服务器端程序员开发好所有接口之后再开始开发前端的ajax请求功能,因为通过“模拟”真实的服务器端的响应,便可以保证功能的正确性,而服务器端开发程序员,只要保证最终的响应是符合规定的即可。这大大简化了程序开发的效率,当然也降低了不同业务线程序员联调的难度。

2.2测试人员

构造数据,设置断点可篡改请求和返回的数据包。根据测试的不同场景,有时需要在测试过程中更改请求、或者更改响应内容,从而达到最终的测试目标。这样就不用到处求人修改限制,给别人增加额外工作量。

比如:一个年龄的输入框,输入框前端做了限制1-200,那么我们测试的时候,需要测试小于1的情况下。很显然前端只能输入大于1的。这是我们可以先抓到接口,修改请求参数,绕过前端,传一个小于1的数,检查服务端的功能是否OK。类似的还有金额输入框、分数输入框等等。

3.什么是断点?

断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析。也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时间。

而在Fiddler这里所谓断点功能就是将你的请求或者响应截获下来,但是不发送也不返回,都放到Fiddler这里, 这个时候你可以做很多事情,比如说,把请求报文改了,或 响应报文改了,再发送给服务器 或 客户端.

4.断点时间点(位置)

Fiddler为Web请求提供了类似的,基于断点的调试功能。会话在执行过程中有两个可能中断的时间点:

(1)从客户端读到请求后,在请求被发送到服务器之前。

(2)在服务器发货响应后,在响应返回给客户端之前。

以上两种断点就是打断点的两种方式:分别是请求断点(request breakpoint)和响应断点(response breakpoint)。

请求断点:对请求的数据进行修改,在请求还没到服务器的时候,我们可以在fiddler中把参数改了,然后再把请求发过去。当程序在请求中断点停止执行时,你可以任意修改该请求,包括URL、headers或body。你还可以选择不发送该请求给服务器,自定义响应返回给客户端。大多数情况下,客户端应用不知道Fiddler修改了它的请求。

响应断点:对响应的数据进行修改,是服务器已经处理完请求了,准备给前端返回数据了,但是fiddler把这里拦下来了,想对响应数据做一些修改。比如前端需要展示今日登录次数,我想看前端展示登录1000000000000000000000次的效果,我不可能真的点这么多次,也不想去数据库跑脚本差这么多没用的数据,那么我就直接改这个接口的返回值就好了。当程序在响应断点停止执行时,你可以任意修改响应的内容,包括headers或body。你还可以自己生成新的响应,取代服务端接收到的响应。在响应断点,你也可以修改任意客户端发送的请求,但是由于该请求已经发送给服务器了,这些修改只在Fiddler中生效-服务器永远都看不到你做的这些修改。

5.断点的位置

断点的位置有两种,如下图所示:

1.Before response:这个是打在request请求的时候,未到达服务器之前。

2.After response:也就是服务器响应之后,在Fiddler将响应传回给客户端之前。

6.设置断点的方式

设置断点有两种方式:

(1)全局断点:一种用工具栏中的按钮来设置断点,特点是会拦截所有的请求。

(2)单个断点:一种用命令行的形式来设置断点,特点是拦截某个请求。

(3)Filters:通过Filters里面的断点设置来设置断点

6.1Breakpoint Bar(断点栏)

当会话停止执行时,在Request Inspectors和Response Inspectors之间会出现一个红色Breakpoint Bar。它由两个按钮和一个下拉框组成,如下图所示:

只有当程序在请求的断点处停止时,黄色的Break on Response按钮会处于可点击状态。当点击该按钮,它会为当前的会话设置响应断点,然后使程序恢复执行,向服务器发送(可能修改过的)请求。点击绿色的Run to Completion按钮后,程序会继续执行直至程序结束,不会在接收到响应时中断。

在 Breakpoint Bar右侧的下拉框中,可以选择特定的响应模板或者文件作为该请求的响应,如下图所示:

从下拉框中选中某个文件后,它会马上被加载到想要的Inspectors(观察窗口中),以便在返回客户端之前进一步修改响应的具体内容(但不许要修改磁盘文件)。如果你在请求断点处使用下拉框中选中的内容作为响应,该请求就不会继续发送给服务端,因为Fiddler会返回响应。

6.1全局断点

全局断点就是中断fiddler捕获的所有请求,设置有两种方法。

6.1.1方法一

1.选择Fiddler菜单中Rules->Automatic Breakpoints->Before Requests(请求前断点)/After Responses(响应后断点)/Disabled (禁止断点),设置断点,也可以使用快捷键F11。如下图所示:

2.点击“Before Request”选完后左下方会有一个红底蓝字的大T。如下图所示:

3.点击“After Response”选完后左下方会有一个红底绿字的大T。如下图所示:

6.1.2方法二

快捷点击指定位置:就是直接可以在状态栏的这个位置直接点出来(前边介绍状态栏的时候提到过)。点一次,红底蓝字:对请求断点;点两次,红底绿字,对响应断点;点三次,取消。如下图所示:

6.2单个断点

局部断点设置在底部命令行处进行,与全局断点不同之处是满足我们设置的条件进行断点。通过命令行输入命令方法,可对部分请求进行拦截。例如:

bpu www.baidu.com --代表只中断www.baidu.com的请求,其他请求不处理
bpafter www.baidu.com --代表只中断www.baidu.com的响应,其他返回不处理
bps xxx 中断响应为指定字符的所有session响应
bpv/bpm xxx 中断指定请求方式的session响应

具体操作步骤如下:

在进行断点调试时,想必之前已经知道了web网站或者接口请求的URL地址,这时候只需要针对这一条请求打断点调试,在命令行中输入指令就可以了。

1.请求前断点(before response): bpu

要打断点的web网站或者接口:https://xxxx/xxxxx

命令行输入:bpu https://xxxx/xxxxx 回车

请求web网站或者接口的时候,就会只拦截这个web网站或者接口了,此时可以修改任意请求参数

取消断点,在命令行输入: bpu 回车就可以了。如下图所示:

2.响应后断点(after requests): bpafter

要打断点的web网站或者接口:https://xxxx/xxxxx

在命令行输入:bpafter https://xxxx/xxxxx 回车

调用web网站或者接口,会发现已经拦截到调用接口后服务器返回的数据了,此时可以修改任意返回数据。如下图所示:

取消断点,在命令行输入: bpafter 回车就可以了。如下图所示:

6.2.1命令行其它相关指令

Bpafter, Bps, bpv, bpm, bpu。这几个命令主要用于批量设置断点,例如:

Bpafter xxx: 中断  URL  包含指定字符的全部  session  响应

Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应

Bpv xxx: 中断指定请求方式的全部  session  响应

Bpm xxx: 中断指定请求方式的全部  session  响应 、等同于 bpv xxx

Bpu xxx:与bpafter类似

当这些命令没有加参数时,会清空所有设置了断点的HTTP请求。

更多的其他命令可以参考Fiddler官网手册。那么一些常见的断点命令如下表:

命令 描述 案例 解除断点
bpafter bpafter后边跟一个字符串,表示中断所有包含该字符串的请求 bpafter baidu 输入bpafter解除断点
bpu bpafter功能差不多, bpu baidu 输入bpu解除断点
bpv 只中断HTTP方法的命令,HTTP方法如POST、GET bpv get 输入bpv解除断点
bpm 只中断HTTP方法的命令,HTTP方法如POST、GET bpm get 输入bpm解除断点
go 放行中断下来的请求,相当于工具栏上的go按钮 go  

6.3Filters设置断点

通过Filters里面的断点设置来设置断点,例如:通过Filters设置post请求断点,然后在浏览器提交post请求,会话列表就能看到对应请求被标识为断点,然后选择该会话切换到Inspectors 标签则可以修改请求参数信息和响应结果信息等。如下图所示;

7.小结

宏哥这里总共介绍了三种设置断点的方式,一般工作中,我们经常会用到的是前两种方法,第三种方法宏哥一般不建议使用设置断点(特殊情况例外)。好了,今天时间也不早了,讲解和分享就到这里!感谢您耐心的阅读~~

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试的更多相关文章

  1. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(34)-Fiddler如何抓取微信小程序的包-上篇

    1.简介 有些小伙伴或者是童鞋们说小程序抓不到包,该怎么办了???其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了,应该可以轻松就抓到包了.那么安卓手机小程序就比较困难,不是那么友好了.所 ...

  2. Fiddler抓包-get与post请求

    from:https://www.cnblogs.com/yoyoketang/p/6719717.html 本篇以博客园的请求为例,简单分析get与post数据有何不一样,以后也能分辨出哪些是get ...

  3. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话

    1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议,不像前十几年前直接是http协议直接裸奔在互联网.还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了,想大展身手抓一下百度的包, ...

  4. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(10)-Fiddler如何设置捕获Firefox浏览器的Https会话

    1.简介 经过上一篇对Fiddler的配置后,绝大多数的Https的会话,我们可以成功捕获抓取到,但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话,需要我们更进一步的配置才能捕获到会 ...

  5. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(11)-Fiddler设置安卓手机抓包,不会可是万万不行的!

    1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Fiddler能截获 Android 和 Windows Phone 等 ...

  6. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(12)-Fiddler设置IOS手机抓包,你知多少???

    1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Fiddler 能捕获Android 和 Windows Phone 等 ...

  7. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者,再识AutoResponder标签-上篇

    1.简介 Fiddler充当第三者,主要是通过AutoResponder标签在客户端和服务端之间,Fiddler抓包,然后改包,最后发送.AutoResponder这个功能可以算的上是Fiddler最 ...

  8. 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下

    1.前言 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识.其实这部分也没有什么,主要是给小伙伴或者童鞋们讲一些实际工作中的场景,然后隆重推出我们的猪脚(主角)-Fiddler. 1. ...

  9. 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(7)-Fiddler状态面板-QuickExec命令行

    1.简介 Fiddler成了网页调试必备的工具,抓包看数据.Fiddler自带命令行控制,并提供以下用法.Fiddler的快捷命令框让你快速的输入脚本命令. 除了输入默认命令,也可以自定义命令,你可以 ...

随机推荐

  1. 《回炉重造 Java 基础》——集合(容器)

    整体框架 绿色代表接口/抽象类:蓝色代表类. 主要由两大接口组成,一个是「Collection」接口,另一个是「Map」接口. 前言 以前刚开始学习「集合」的时候,由于没有好好预习,也没有学好基础知识 ...

  2. 20212115朱时鸿 《python程序设计》实验四报告

    课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号:20212115实验教师:王志强实验日期:2022年5月28日必修/选修: 公选课 1.实验内容 Python综合应用:爬 ...

  3. 关于『Markdown』:第一弹

    关于『Markdown』:第一弹 建议缩放90%食用 声明: 在我之前已有数位大佬发布 "Markdown" 的语法知识点, 在此, 仅整理归类以及补缺, 方便阅读. 感谢 C20 ...

  4. React设置proxy后依旧报CROS错误

    1.判断表单数据是否为后端接收的类型 POST GET2.axios自动转换问题 手动添加标头这份表单数据包括了files (二进制数据)而标头显示是JSON格式 不符 所以报CROS 更多文章请移步 ...

  5. java面试:关于public static void main(String[] args)是什么意思?

    它是作为JAVA中的主函数,所有java程序的运行起点就是这个方法,除了args这个名字可以不一样外,其他必须是这样. 主函数的一般写法如下: public static void main(Stri ...

  6. GDKOI 2021 Day3 PJ 懵逼记

    今天早了一点起来,初三的大奆都来做比赛了, 自然,自测的有许多 AK 虽然今天的题比昨天简单,但还是脑子还是十分迟钝,以至于贪心都想不出 真为明天的提高组而担忧 T1 斜率被卡 90 ,直接用勾股定理 ...

  7. 【Golang】程序如何优雅的退出?

    1. 背景 项目开发过程中,随着需求的迭代,代码的发布会频繁进行,在发布过程中,如何让程序做到优雅的退出? 为什么需要优雅的退出? 你的 http 服务,监听端口没有关闭,客户的请求发过来了,但处理了 ...

  8. React Suspense 尝鲜,处理前后端IO异步操作

    简单介绍一下Suspense Suspense主要用来解决网络IO问题,它早在2018年的React 16.6.0版本中就已发布.它的相关用法有些已经比较成熟,有的相对不太稳定,甚至经历了重命名.删除 ...

  9. 图片放在div中低下会出现一条缝

    页面要达到的样子 中间写的是时候是向div里面放一张图片就行了 <head> <link rel="stylesheet" href="reset.cs ...

  10. Java开发学习(八)----IOC/DI配置管理第三方bean、加载properties文件

    前面的博客都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理? 一.案例:数据源对象管理 本次案例将使用数据源Druid和C3P0来配置学习下. 1.1 环境准备 学习 ...