脚本作用
我们用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