用python将模拟浏览器提交请求时需要提交的headers和data数据转换成字典格式

用python将浏览器请求提交的data转为dict

脚本作用

我们用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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值