解决fidder小黑怪倒出JMeter文件缺失域名、请求头
创始人
2025-01-11 07:08:02
0

解决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_folder         zip_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 文件,则重命名为 .txt             if 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.text             domain_prop = sampler.find(".//stringProp[@name='HTTPSampler.domain']")             if domain_prop is not None:                 domain_prop.text = domain_value     tree.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   002         new_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'.*?\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标头管理器XML             header_xml = ''             for header, value in headers.items():                 header_xml += f'''                                                {header}                         {value}                       '''              # 包裹式格式             jmeter_xml = f'''                   numeric_value}-HTTP信息头管理器" enabled="true">                     {header_xml}                                        '''              # 将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}')  # 第一步:遍历所有的标签,提取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  # 第三步:替换标签节点的内容为指定文件的内容 def replace_header_manager_content(filename, testname, replacement_content):     # 解析 XML 文件     tree = ET.parse(filename)     root = tree.getroot()     # 查找所有  节点     for header_manager in root.findall('.//HeaderManager'):         # 检查 testname 属性是否以指定的 testname 开头         if header_manager.get('testname', '').startswith(testname):             # 清空  节点的内容             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('', '')         content = content.replace('', '')         content = content.replace('<', '<')         content = content.replace('>', '>')          # 写入修改后的内容到目标文件         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)     # 将提取的文件重命名为 .txt     convert_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、结果

在这里插入图片描述

相关内容

热门资讯

九分钟体悟!同城游比鸡辅助!(... 九分钟体悟!同城游比鸡辅助!(透视)外挂开挂辅助器软件(2020已更新)-哔哩哔哩九分钟体悟!同城游...
分辨真假(wepoke)软件透... 分辨真假(wepoke)软件透明挂(辅助挂)太坑了其实真的是有挂(2020已更新)(哔哩哔哩),we...
最新技巧欢聚斗地主有挂的(辅助... 最新技巧欢聚斗地主有挂的(辅助挂)太坑了原来确实是有挂(2023已更新)(哔哩哔哩)最新技巧欢聚斗地...
第三个科普微扑克发牌规律性总结... 第三个科普微扑克发牌规律性总结(辅助挂)软件透明挂(2024已更新)(哔哩哔哩);1、超多福利:超高...
重磅来袭wpk辅助挂(辅助透视... 重磅来袭wpk辅助挂(辅助透视)软件透明挂(2021已更新)(哔哩哔哩);wpk中的10万兆豆可能无...
我来向大家传授(菠萝德州)软件... 【福星临门,好运相随】;我来向大家传授(菠萝德州)软件透明挂(辅助挂)太坑了其实确实是有挂(2023...
程序员教你(WPK)透视辅助(... 程序员教你(WPK)透视辅助(WPK)辅助透视真的假的(2020已更新)(哔哩哔哩)程序员教你(WP...
利用css设计一套漩涡式网格(... 在Web开发中,CSS Grid布局系统为我们提供了前所未有的灵活性和控制力,使得创建复杂的二维布局...
【C语言报错已解决】格式化字符... 🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C+&...
避坑细节《wpk辅助透视》WP... 避坑细节《wpk辅助透视》WPK工具透视辅助工具(2022已更新)(哔哩哔哩);1、完成wpk的残局...