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

news2024/11/18 14:01:05

1.简介

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

2.为什么要打断点呢?

2.1开发人员

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

2.2测试人员

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

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

3.什么是断点?

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

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

 如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

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官网手册。那么一些常见的断点命令如下表:

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

6.3Filters设置断点

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

7.小结

这里总共介绍了三种设置断点的方式,一般工作中,我们经常会用到的是前两种方法,第三种方法宏哥一般不建议使用设置断点(特殊情况例外)。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【wsl-windows子系统】安装、启用、禁用以及同时支持docker-desktop和vmware方案

如果你要用docker桌面版,很可能会用到wsl,如果没配置好,很可能wsl镜像会占用C盘很多空间。 前提用管理员身份执行 wsl-windows子系统安装和启用 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper…

什么是DOTS?

(图片为实机测试) DOTS全称:(Burst Job SystemEntity Component System) 新型高性能、多线程面向数据的技术堆栈 是由:BrustJob System ECS组合而成,是一种面向数据对象的编程体系,在unity中您也可以对…

机器学习-Gradient Descent

机器学习(Gradient Descent) videopptblog 梯度下降(Gradient Descent) optimization problem: 损失函数最小化 假设本模型有两个参数𝜃1和𝜃2,随机取得初始值 求解偏微分,梯度下降对参数进行更新 Visualize: 确定梯度方向&…

学习使用axios,绑定动态数据

目录 axios特性 案例一:通过axios获取笑话 案例二:调用城市天气api接口数据实现天气查询案例 axios特性 支持 Promise API 拦截请求和响应(可以在请求前及响应前做某些操作,例如,在请求前想要在这个请求头中加一些…

leetcode 1372. 二叉树中的最长交错路径

给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。 改变前进方向&a…

IIS创建网站报错 \\?\C:\Windows\inetsrv\config\applicationHost.config

现象: IIS创建不了网站,IIS配置没有发生改变 原因: 服务器C盘无空间,释放空间后问题解决。

Java-day03(程序流程控制)

程序流程控制 1.顺序结构 程序从上至下逐行执行,无判断与跳转 public class Test1{ public static void main(String[] args){int i 1;int j i 1; System.out.println(j);} }2.分支结构 依据条件,选择性执行某段语句 主要有以下两种 2.1 i…

计算机毕设 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长…

VSCode搭建GCC环境

1. 下载 https://www.mingw-w64.org/downloads/ https://github.com/niXman/mingw-builds-binaries/releases 2.安装 x86_64-12.2.0-release-win32-seh-rt_v10-rev1.7z解压到D盘 我的电脑–属性–系统属性–环境变量–系统变量–path D:\MinGW-w64\x86_64-12.2.0-release…

用html+javascript打造公文一键排版系统10:单一附件说明排版

如果公文有附件,一般会在公文正文下作附件说明。 一、附件说明的格式 一般为: 公文如有附件,在正文下空一行左空二字编排"附件"二字,后标全角冒号和附件名称。如有多个附件,使用阿拉伯数字标注附件顺序号&…

OSI 7层模型 TCP/IP四层模型 5层模型都是什么,作用是什么【每层的协议没整理完】

7层模型 && 4层TCP/IP 模型对照关系 7层&&5层&&4层模型对照: 我们的教科书为了更好地表示数据包在网络传输上的封装和解封装,抽象出了5层模型 7层模型: 各层的用途: 应用层:为计算机上用户提…

Qt 2. QSerialPortInfo显示串口信息

在ex2.pro 添加&#xff1a; QT serialport//main.cpp #include "ex2.h" #include <QtSerialPort/QtSerialPort> #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Ex2 w;w.show();QList<QSerialPortInfo>…

(二)利用Streamlit创建第一个app——单页面、多页面

1 单页面app Step1&#xff1a;创建一个新的Python脚本。我们称之为uber_pickups.py。 Step2&#xff1a;在您喜爱的IDE或文本编辑器中打开uber_pickups.py&#xff0c;然后添加以下行&#xff1a; import streamlit as st import pandas as pd import numpy as npStep3&…

计算机视觉(五)深度学习基础

文章目录 深度学习基础卷积神经网络与传统神经网络区别深度学习与神经网络的区别 目标函数选择合适的目标函数Softmax层 改进的梯度下降梯度消失的直观解释激活函数学习步长SGD的问题Momentum动量Nesterov MomentumAdagradRMSpropAdam 各种梯度下降算法比较关于算法选择的建议B…

1、Hadoop3.x 从入门到放弃,第一章:概念

Hadoop3.x从入门到放弃&#xff0c;第一章&#xff1a;概念 一、什么是大数据 1、主要解决什么 大数据主要解决&#xff1a;海量数据的“采集”、“存储” 和 "分析计算" 问题2、大数据特点 1> Volume 大量 2> velocity 高速 3> variety 多样性数据分为…

高通死机分析-工具

为了方便高通稳定性领域分析9008以及死机问题&#xff0c;特此写此工具&#xff0c;方便大家分析死机问题&#xff0c;此工具还待完善&#xff0c;后续将发布&#xff0c;有兴趣请联系2251858097qq.com

matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…

【C#教程】零基础从入门到精通

今天给大家分享一套零基础从入门到精通&#xff1a;.NetCore/C#视频教程&#xff1b;这是2022年最新整理的、590G的开发教程资料。课程涵盖了.Net各方面的知识&#xff0c;跟着这个教程学习&#xff0c;就足够了。 课程分类 1、C#从基础到精通教程&#xff1b; 2、Winform从…

6.生成随机数、猜数字游戏(rand函数、srand函数、time函数)

猜数字游戏 1.生成随机数1.1 rand函数1.2 srand函数1.3 time函数1.4 设置随机数的范围 2.猜数字游戏 1.生成随机数 1.1 rand函数 函数原型如下&#xff1a; int rand(void); 所需头文件&#xff1a;stdlib.h 作用&#xff1a;调用后随机返回一个伪随机数&#xff0c;随机数范…

QtXlsx: no such file or directory

Qt项目&#xff0c;引用了QtXlsx&#xff0c;准备运行&#xff0c;提示报错&#xff1a; QtXlsx: No such file or directory 奇怪。按理说&#xff0c;安装QtXlsx的三个步骤都已经执行成功了&#xff1a; qmake make make install 把生成的so库文件拷贝到相关目录也是无效。…