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

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

1、目录结构:

在这里插入图片描述

2、代码

'''
coding:utf-8
@Software:PyCharm
@Time:2024/7/10 14:02
@Author:Dr.zxy
'''
import zipfile
import os
import xml.etree.ElementTree as ET
import re#定义信息头
headers_to_extract = ['Host', 'Connection', 'Content-Length', 'apiversion', 'apicode','User-Agent', 'format', 'content-type', 'accept', 'pagecode','x-secure-opt-log', 'appcode', 'Origin', 'Referer','Accept-Language', 'Accept-Encoding', 'Cookie'
]# 定义函数解压 .saz 文件
def extract_saz(saz_file):# 创建一个目录来存放解压后的内容extract_folder = saz_file.replace('.saz', '_extracted')os.makedirs(extract_folder, exist_ok=True)# 打开 saz 文件with zipfile.ZipFile(saz_file, 'r') as zip_ref:# 解压所有文件到 extract_folderzip_ref.extractall(extract_folder)return extract_folder# 定义函数将提取的文件重命名为 .txt
def convert_to_txt(extract_folder):# 遍历提取的文件夹中的所有文件for root, _, files in os.walk(extract_folder):for file in files:# 如果文件不是 .txt 文件,则重命名为 .txtif not file.endswith('.txt'):original_path = os.path.join(root, file)new_path = os.path.join(root, os.path.splitext(file)[0] + '.txt')os.rename(original_path, new_path)
#url填充
def update_domain_from_comments(xml_file):#加载文件tree = ET.parse(xml_file)root = tree.getroot()for sampler in root.findall('.//HTTPSamplerProxy'):testplan_comments = sampler.find(".//stringProp[@name='TestPlan.comments']")if testplan_comments is not None:domain_value = testplan_comments.textdomain_prop = sampler.find(".//stringProp[@name='HTTPSampler.domain']")if domain_prop is not None:domain_prop.text = domain_valuetree.write(xml_file, encoding='utf-8', xml_declaration=True)#信息头添加序号
def update_testname(filename):tree = ET.parse(filename)root = tree.getroot()header_managers = root.findall('.//HeaderManager')for idx, header_manager in enumerate(header_managers):# 信息头管理器添加序号 001   002new_testname = f'{idx:03}-HTTP信息头管理器'  # {:03} 确保3位数字的前导为零header_manager.set('testname', new_testname)# 写到Jmeter文件tree.write(filename, encoding='utf-8', xml_declaration=True)# 读取文件内容with open(filename, 'r', encoding='utf-8') as file:content = file.read()# 定义要删除的 XML 片段pattern = r'<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="000-HTTP信息头管理器" enabled="true">.*?</HeaderManager>\s*<hashTree\s*/>'# 使用正则表达式删除匹配的部分new_content = re.sub(pattern, '', content, flags=re.DOTALL)# 将修改后的内容写回文件with open(filename, 'w', encoding='utf-8') as file:file.write(new_content)# 从文件中读取头并转换为JMeter Header Manager格式的函数
def convert_to_jmeter_xml(directory, headers_to_extract):# 遍历目录中的文件for filename in os.listdir(directory):if filename.endswith("_c.txt"):file_path = os.path.join(directory, filename)#提取下划线前的数值numeric_value = filename.split('_')[0].zfill(3)# 处理文件以提取标头headers = {}with open(file_path, 'r', encoding='utf-8') as file:content = file.read()for header in headers_to_extract:match = re.search(rf'^{header}: (.+)$', content, flags=re.MULTILINE)if match:headers[header] = match.group(1)# 生成JMeter标头管理器XMLheader_xml = ''for header, value in headers.items():header_xml += f'''<elementProp name="" elementType="Header"><stringProp name="Header.name">{header}</stringProp><stringProp name="Header.value">{value}</stringProp></elementProp>'''# 包裹式格式jmeter_xml = f'''<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="{numeric_value}-HTTP信息头管理器" enabled="true"><collectionProp name="HeaderManager.headers">{header_xml}</collectionProp></HeaderManager>'''# 将JMeter XML内容写入新文件output_filename = f'{numeric_value}_jmeter.xml'output_path = os.path.join(directory, output_filename)with open(output_path, 'w', encoding='utf-8') as output_file:output_file.write(jmeter_xml)#print(f'Converted {filename} to {output_filename}')# 第一步:遍历所有的<HeaderManager>标签,提取testname属性中'-'前的值
def extract_testnames(filename):testnames = []tree = ET.parse(filename)root = tree.getroot()for header_manager in root.findall('.//HeaderManager'):testname = header_manager.get('testname', '')if '-' in testname:testnames.append(testname.split('-')[0])return testnames# 第二步:读取替换目标文件的内容
def read_file_content(filename):with open(filename, 'r', encoding='utf-8') as file:content = file.read()return content# 第三步:替换<HeaderManager>标签节点的内容为指定文件的内容
def replace_header_manager_content(filename, testname, replacement_content):# 解析 XML 文件tree = ET.parse(filename)root = tree.getroot()# 查找所有 <HeaderManager> 节点for header_manager in root.findall('.//HeaderManager'):# 检查 testname 属性是否以指定的 testname 开头if header_manager.get('testname', '').startswith(testname):# 清空 <HeaderManager> 节点的内容header_manager.clear()# 设置新的内容header_manager.text = replacement_content# 保存修改后的 XML 文件tree.write(filename, encoding='utf-8', xml_declaration=True)def modify_jmx_file(input_file, output_file):try:# 读取原始文件内容with open(input_file, 'r', encoding='utf-8') as f:content = f.read()# 替换操作content = content.replace('<HeaderManager>', '')content = content.replace('</HeaderManager>', '')content = content.replace('&lt;', '<')content = content.replace('&gt;', '>')# 写入修改后的内容到目标文件with open(output_file, 'w', encoding='utf-8') as f:f.write(content)#print(f'文件处理完成,修改后的文件保存为 {output_file}')except FileNotFoundError:print(f'Error: File {input_file} not found.')#修改填充的 jmeter
jmx_filename = 'jmx/33n.jmx'
#新的文件名称
output_file = 'jmx/new_modified.jmx'if __name__ == "__main__":# 替换为你的.saz 文件路径saz_file_path = 'files/333.saz'# 解压 .saz 文件extract_folder = extract_saz(saz_file_path)# 将提取的文件重命名为 .txtconvert_to_txt(extract_folder)print(f"step1---fidder转换完成!提取文件存放在:{extract_folder}")update_domain_from_comments(jmx_filename)print(f"step2---url填充完毕")update_testname(jmx_filename)print(f"step3---信息头管理器【序号】添加完成")convert_to_jmeter_xml(extract_folder+"/raw", headers_to_extract)print(f"step4---信息头管理器【新节点·生成】生成完成")# 第一步:提取所有testname中'-'前的值testnames = extract_testnames(jmx_filename)# 第二步和第三步:针对每个testname,读取对应的XML文件并替换内容for testname in testnames:xml_filename = os.path.join(extract_folder+"/raw/", f'{testname}_jmeter.xml')if os.path.exists(xml_filename):replacement_content = read_file_content(xml_filename)replace_header_manager_content(jmx_filename, testname, replacement_content)else:print(f"Warning: File {xml_filename} not found.")print(f"step5---信息头管理器【新节点·替换】完成")modify_jmx_file(jmx_filename, output_file)print(f"step6---信息头管理器【新节点·替换清洗】完成")

3、注意事项

4、结果

在这里插入图片描述

相关文章:

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

解决fidder小黑怪倒出JMeter文件缺失域名、请求头 1、目录结构&#xff1a; 2、代码 coding:utf-8 Software:PyCharm Time:2024/7/10 14:02 Author:Dr.zxyimport zipfile import os import xml.etree.ElementTree as ET import re#定义信息头 headers_to_extract [Host, Conn…...

智慧城市的神经网络:Transformer模型在智能城市构建中的应用

智慧城市的神经网络&#xff1a;Transformer模型在智能城市构建中的应用 随着城市化的快速发展&#xff0c;智能城市的概念应运而生&#xff0c;旨在通过先进的信息技术提升城市管理效率和居民生活质量。Transformer模型&#xff0c;作为人工智能领域的一颗新星&#xff0c;其…...

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心&#xff0c;采用迭代、循序渐进的方法进行软件开发。 通俗来说&#xff0c;敏捷开发是一个软件开发流程&#xff0c;是一个采用了迭代方法的开发流程 简单来说&#xff0c;迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…...

Ansible 安装及使用说明

方案1. 直接下载 源码包到本地后安装 ansible 下载地址&#xff1a;https://releases.ansible.com/ansible/ ansible社区: https://github.com/ansible/ansible 下载地址&#xff1a;GitHub - ansible/ansible at v2.9.0 方案2. 以腾讯的yum源说明&#xff1a;腾讯云文档…...

MyBatisPlus实现增删改查

文章目录 MyBatisPlus实现增删改查基本操作分页查询配置分页插件 MyBatisPlus实现增删改查 实体类GkUser package com.geekmice.springbootselfexercise.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;…...

【Rust】——不安全Rust

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…...

使机器人在执行任务时更加稳定

为了使机器人在执行任务时更加稳定&#xff0c;调整参数时需要考虑多个因素&#xff0c;如步态、速度、角度等。这些参数的调整需要基于实际环境、任务需求和机器人自身的物理特性。以下是一些具体的调整建议&#xff1a; 1. 调整步态和步高 gait_type3; step_height0.03;步态…...

FFmpeg学习(五)-- libswresample使用说明及函数介绍

libswresample Audio合成和重采样 libswresample库用来进行audio数据的合成和重采样操作。调用流程&#xff1a; 调用 swr_alloc 创建SwrContext结构体。设置SwrContext参数&#xff0c;有两种方法&#xff1a; 调用av_opt_set_xx函数逐项设置参数&#xff1b;swr_alloc_set_…...

车载视频监控管理方案:无人驾驶出租车安全出行的保障

近日&#xff0c;无人驾驶出租车“萝卜快跑”在武汉开放载人测试成为热门话题。随着科技的飞速发展&#xff0c;无人驾驶技术已逐渐从概念走向现实&#xff0c;特别是在出租车行业中&#xff0c;无人驾驶出租车的推出将为公众提供更为安全、便捷、高效的出行服务。 视频监控技…...

05STM32EXIT外部中断中断系统

STM32EXIT外部中断&中断系统 中断系统中断触发条件&#xff1a;中断处理流程和用途&#xff1a; STM32中断NVIC嵌套中断向量控制器基本结构NVIC基本结构NVIC优先级分组EXTI简介EXTI基本结构AFIO复用IO口EXTI内部框图旋转编码器简介硬件电路外设手册里的介绍NVIC中断使能寄存…...

MetaGPT和LangGraph对比

MetaGPT和LangGraph是两个不同的AI Agent框架&#xff0c;各有其特点和优势:MetaGPT: MetaGPT是一个多Agent协作框架&#xff0c;模拟软件公司的运作方式。它包含多个角色如产品经理、架构师、项目经理和工程师&#xff0c;每个角色都有特定的职责。MetaGPT采用对话模式&#…...

基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)

基于SpringBootHadooppython的物品租赁系统(带1w文档) 基于SpringBootHadooppython的物品租赁系统(带1w文档) 物品租赁系统是电子、信息技术相结合&#xff0c;是一种必然的发展趋势。以互联网为基础&#xff0c;以服务于广大用户为目的&#xff0c;发展整体优势&#xff0c;扩…...

关于 RK3588刷镜像升级镜像”没有发现设备“ 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140287339 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

docker 上传镜像到hub仓库

要将 Docker 镜像上传到 Docker Hub&#xff0c;你需要按照以下步骤操作&#xff1a; 登录 Docker Hub 首先&#xff0c;你需要登录到 Docker Hub。打开终端并运行以下命令&#xff1a;docker login系统会提示你输入 Docker Hub 的用户名和密码。 如果密码忘记可以token登录&a…...

查询(q_proj)、键(k_proj)和值(v_proj)投影具体含义

查询(q_proj)、键(k_proj)和值(v_proj)投影&#xff0c;这些投影是自注意力机制的核心组件&#xff0c;特别是在Transformer架构中。 让我们通过一个简化的例子来说明&#xff1a; import numpy as np# 假设输入维度是4&#xff0c;注意力头数是2 input_dim 4 num_heads 2 …...

超详细版阿里云控制台环境配置+数据库配置

目录 一、登录阿里云控制台二、xshell建立远程连接1.安装xshell2.查看公网IP3.新建会话重置密码 三、搭建环境1.安装宝塔面板2.打开宝塔面板 四、安装配置MySQL1.安装2.放行端口号3.新建数据库4.测试连接数据库 一、登录阿里云控制台 登录阿里云控制台&#xff0c;找到实例&am…...

Linux:Linux网络总结(附下载链接)

文章目录 下载链接网络问题综合问题访问一个网页的全过程&#xff1f;WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别&#xff1f;HTTPS解决了HTTP的哪些问题&#xff1f;HTTPS如何解决的&#xff1f;HTTPS是如何…...

Cxx Primer-CP-2

开篇第一句话足见作者的高屋建瓴&#xff1a;类型决定程序中数据和操作的意义。随后列举了简单语句i i j;的意义取决于i和j的类型。若它们都是整形&#xff0c;则为通常的算术意义。若它们都为字符串型&#xff0c;则为进行拼接操作。若为用户自定义的class类型&#xff0c;则…...

OpenCV距离变换函数distanceTransform的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 distanceTransform是OpenCV库中的一个非常有用的函数&#xff0c;主要用于计算图像中每个像素到最近的背景&#xff08;通常是非零像素到零像素&…...

Service Mesh 是一种用于处理服务间通信的基础设施层

Service Mesh 是一种用于处理服务间通信的基础设施层&#xff0c;它通常与微服务架构一起使用&#xff0c;以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。Service Mesh 的一个流行实现是 Istio&#xff0c;它基于 Envoy 代理和 Kubernetes。 然而&#xff0…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...