我们用python脚本模拟浏览器或app向服务器提交http或https请求时,大多数情况用到post方法,这时候就需要手动复制headers和data过来构造成json数据,放在自己在脚本里。但是有时候不能直接复制到标准的json数据,例如:键值对没有用单引号或双引号括起来、单行键值对末尾没加逗号、同一行两个键值对之间的分号后面没加空格,有点难看。如果有很多键值对,那么手动改为标准的json数据会很费时间,于是就有了这个脚本。
首先复制headers或data数据到文本,用python读取文本的每一行键值对进行格式化处理,最后输出标准数据,自动复制到剪贴板,方便粘贴代码。为了方便阅读,我先把数据转换成python的dict数据,在提交post请求时,用json.dumps()方法将dict转化成json就可以了。
convert_to_dict.py
# -*- coding: utf-8 -*- import pyperclip import re class ConvertToDict: def __init__(self, data): # 如果键的第一个字符为冒号,就临时替换为#号 if data[0] == ':': data = '#' + data[1:] # 去除首尾空格并将键值对分开 data_list = data.strip().split(':', 1) # 将#号恢复为冒号的键 self.key = data_list[0].strip().replace('#', ':', 1) # 值 self.value = data_list[1].strip() # 转换数据到字典格式 def convert_data(self): self.format_quotes() self.format_spaces() return self.join_keys_values() # 格式化引号 def format_quotes(self): # 键值加上单引号 if self.key.find('\"') != -1: self.key = self.key.replace('\"', '\'') self.value = self.value.replace('\"', '\'') if self.key.find('\'') == -1: self.key = '\'' + self.key + '\'' self.value = '\'' + self.value + '\'' # print(self.key) # print(self.value) # 格式化空格 def format_spaces(self): # 键前面加缩进空格 self.key = ' ' + self.key # 值分号后面加一个空格 self.value = re.sub(r';(\s*)', '; ', self.value) # 如果原字符串最后一个字符没有逗号,就加上一个逗号 if self.value[-1] != ',': self.value += ',' # print(self.key) # print(self.value) # 拼接每一行键值对 def join_keys_values(self): key_value = self.key + ': ' + self.value # print(key_value) return key_value if __name__ == '__main__': # 打开文件 file = open("origin_data.txt") # 每次读取一行内容 line_data = file.readline() # 转换结果 convert_result = 'data_dict = {\n' while line_data: # print(line_data) convert_result += ConvertToDict(line_data).convert_data() + '\n' line_data = file.readline() # 最后一行键值对删除逗号 convert_result = convert_result[:-2] + '\n}' print(convert_result) # 复制到剪贴板 pyperclip.copy(convert_result) print('转换结果已复制到剪贴板')示例headers数据:
origin_data.txt
:authority: live-trace.bilibili.com :method: GET :path: /xlive/data-interface/v1/index/log?sessionID=f6d70562f7462043_A599FFB8-F158-4A5C-9A1F-385E6500F2D8&group_id=23593&biz=live&event_id=live_card_show&rule_key=8RbLwhcn2FRZIr8cYZXq0KbzIbRqG6Ze02SsrrCXC6BO06yLLbf845zdP43k_CdCfFgfLElZtfEfYnguZg7wZKFK1bpPuoLTTFOTb1RGoYlYRFAJFI2vs6Sq70FEu1JiRHtKRZunF3RmXrPKuEcJ0aC4YXerqkXBfW2jDnyToLuz730OJAZOCk9CwiBn79Z07Un-KuTcLg0aOZSLBi6qXEzItu63CK47fAvpa9zcl-lKz4tQEmS6L1yk_lnj&platform=web&mobi_app=&build=0&special_id=0 :scheme: https accept: application/json, text/plain, */* accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9 origin: https://www.bilibili.com referer: https://www.bilibili.com/ sec-fetch-dest: empty sec-fetch-mode: cors sec-fetch-site: same-site user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
百度网盘链接:浏览器data转dict 提取码: 8dqn