当前位置: 首页 > news >正文

fiddler抓包工具入门到入职之如何精准的定位前后端的bug

Fiddler是一款强大的网络调试工具,可以拦截和分析HTTP请求和响应,帮助开发者定位前后端的问题。下面介绍如何使用Fiddler精准定位前后端的Bug,并使用Python代码进行操作。

  • 拦截HTTP请求和响应:打开Fiddler,在“File”菜单中选择“Capture Traffic”,开始捕获HTTP请求和响应。在浏览器中访问测试网站时,Fiddler会自动拦截并显示请求和响应。
  • 分析HTTP数据包:通过查看请求和响应的详细信息,找出可能存在的问题。例如,响应状态码、头部信息、返回数据等都可以提供有用的线索。
  • 重放请求:在Fiddler中可以轻松地复制和重放请求,以便进一步调试和分析。在请求列表中选择需要重放的请求,右键选择“Replay”,即可重新发送该请求。
  • 使用Breakpoints:如果想要暂停请求或响应,以便进一步分析和调试,可以使用Fiddler的Breakpoints功能。选择需要设置断点的请求,右键选择“Breakpoints”->“Before Requests/After Responses”,即可在相应位置处暂停请求或响应。
  • 使用FiddlerScript:Fiddler还提供了FiddlerScript,它是一种基于JavaScript的脚本语言,可以在Fiddler中自定义请求和响应的处理逻辑。通过编写FiddlerScript脚本,可以实现自动化测试、请求修改等功能。
  1. import sys

  2. import clr

  3. # 加载FiddlerCore.dll

  4. clr.AddReference("FiddlerCore")

  5. from Fiddler import *

  6. # 创建代理服务器

  7. proxy = Proxy()

  8. proxy.Startup(8888, True, True)

  9. # 定义事件处理器

  10. class MyEventHandler:

  11. def OnBeforeRequest(self, oSession: Session):

  12. # 处理请求

  13. pass

  14. def OnBeforeResponse(self, oSession: Session):

  15. # 处理响应

  16. pass

  17. def OnShutdown(self):

  18. # 关闭代理服务器

  19. proxy.Shutdown()

  20. # 注册事件处理器

  21. handler = MyEventHandler()

  22. FiddlerApplication.BeforeRequest += handler.OnBeforeRequest

  23. FiddlerApplication.BeforeResponse += handler.OnBeforeResponse

  24. FiddlerApplication.Shutdown += handler.OnShutdown

  25. # 运行Fiddler

  26. FiddlerApplication.Run()

上述代码创建了一个代理服务器,并注册了事件处理器,用于处理请求和响应。在MyEventHandler类中可以编写具体的处理逻辑,例如修改请求参数、记录日志等。最后调用FiddlerApplication.Run()启动Fiddler。

总的来说,使用Fiddler可以快速定位前后端的问题,并通过Python等编程语言进行自动化处理,以提高测试效率和质量。

在前面的回答中,我们介绍了如何使用Fiddler工具进行前后端Bug的定位,并且提到了可以使用Python代码来实现自动化测试和请求修改等功能。下面将进一步介绍如何使用Python代码操作Fiddler来定位前后端的Bug。

安装FiddlerCore库
在Python代码中使用Fiddler需要安装FiddlerCore库,可以通过pip命令进行安装:

pip install fiddlercore

启动代理服务器

在Python代码中启动Fiddler代理服务器,可以监听指定的本地端口号。以下是启动代理服务器的示例代码:

  1. import FiddlerCore

  2. proxy_port = 8888

  3. FiddlerCore.FiddlerApplication.Startup(proxy_port, True, True)

  4. print(f"Fiddler started, listening on port {proxy_port}")

  1. 注册事件处理器

在Fiddler代理服务器中,需要注册事件处理器来处理HTTP请求和响应。可以继承自FiddlerCore.IAutoTamper接口,并实现其中的方法。以下是事件处理器的示例代码:

  1. class MyAutoTamper(FiddlerCore.IAutoTamper):

  2. def OnBeforeRequest(self, session: FiddlerCore.Session):

  3. # 处理请求

  4. print(f"Request URL: {session.fullUrl}")

  5. def OnBeforeResponse(self, session: FiddlerCore.Session):

  6. # 处理响应

  7. print(f"Response Status Code: {session.responseStatusCode}")

  8. def OnLoad(self):

  9. pass

  10. def OnUnload(self):

  11. pass

上述代码中的OnBeforeRequest和OnBeforeResponse方法分别处理HTTP请求和响应,并输出一些简单的信息,可以根据具体的需求进行修改。

  1. 运行Fiddler

在Python代码中运行Fiddler代理服务器,可以使用以下代码:

  1. auto_tamper = MyAutoTamper()

  2. FiddlerCore.FiddlerApplication.AfterSessionComplete += auto_tamper.OnBeforeRequest

  3. FiddlerCore.FiddlerApplication.BeforeResponse += auto_tamper.OnBeforeResponse

  4. FiddlerCore.FiddlerApplication.Run(True)

上述代码中注册了事件处理器,并启动了Fiddler代理服务器。通过该代码可以监听请求和响应,并对其进行处理,以便进行前后端Bug的定位。

  1. 修改请求和响应

在Python代码中可以修改HTTP请求和响应,实现自动化测试和调试的功能。以下是修改请求参数的示例代码:

  1. def OnBeforeRequest(self, session: FiddlerCore.Session):

  2. if "POST" in session.RequestMethod:

  3. # 修改请求参数

  4. body = session.GetRequestBodyAsString()

  5. new_body = self.modify_request(body)

  6. session.utilSetRequestBody(new_body)

  7. def modify_request(self, body: str) -> str:

  8. # 对请求参数进行修改

  9. pass

上述代码中,我们从请求体中获取请求参数,并调用modify_request方法进行修改。可以根据具体的情况设计修改逻辑,例如添加、删除或修改某些参数值。

综上所述,通过Fiddler和Python的结合,可以快速定位前后端的Bug,并实现自动化测试和请求修改等功能,以提高测试效率和质量。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 巧用scss实现一个通用的媒介查询代码
  • 破圈之路——写在创作纪念日
  • 【软件测试专栏】认识软件测试、测试与开发的区别
  • 【3.9】贪心算法-解最低加油次数
  • 【机器学习】在 scikit-learn 中,有哪些特征编码方法?分布详细举例列出
  • 数据结构的三要素以及数据类型和抽象数据类型
  • Ubuntu下安装和配置MQTT服务器Mosquitto
  • AMD简介
  • JavaWeb - Spring Boot
  • 一维/二维高斯分布的负对数似然推导
  • 前后端分离的security角色权限实现
  • 智能合约漏洞(四)
  • 接口测试 —— 如何设计高效的测试用例!
  • 使用 nuxi build-module 命令构建 Nuxt 模块
  • C语言中的“#”和“##”
  • ➹使用webpack配置多页面应用(MPA)
  • AngularJS指令开发(1)——参数详解
  • Fabric架构演变之路
  • Fundebug计费标准解释:事件数是如何定义的?
  • Github访问慢解决办法
  • Laravel Telescope:优雅的应用调试工具
  • Mac转Windows的拯救指南
  • PHP CLI应用的调试原理
  • Python_网络编程
  • python学习笔记 - ThreadLocal
  • storm drpc实例
  • 高度不固定时垂直居中
  • 后端_ThinkPHP5
  • 如何在GitHub上创建个人博客
  • 事件委托的小应用
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Linux权限管理(week1_day5)--技术流ken
  • puppet连载22:define用法
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​linux启动进程的方式
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • $.ajax()
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (PADS学习)第二章:原理图绘制 第一部分
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (南京观海微电子)——示波器使用介绍
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (正则)提取页面里的img标签
  • (转)大型网站的系统架构
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET企业级应用架构设计系列之开场白
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @angular/cli项目构建--http(2)
  • @DataRedisTest测试redis从未如此丝滑
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解