F12请求参数格式化

1. 前言

最近玩接口测试时, F12开发者工具下发现接口参数过多, 直接写太浪费时间, 复制又需要一个个添加引号, 着实麻烦, 所以寻思偷个懒一键格式化

2. 思路

起初想到使用正则, 给:两边的参数添加引号, 但发现整形数据不好处理, 且有的参数对应的值为空, 决定放弃此方案

鉴于requests下的参数params, data, json等都是dict类型, 考虑按行读取文本, 并以:分隔, 可以很容易地对键值进行处理, 生成的字典数据再使用json.dumps美化

3. 效果图

info.gif

4. 源码

import PySimpleGUI as sg
import re
import json

origin_text_key = 'origin_text_key'
format_text_key = 'format_text_key'
format_btn_event = 'FORMAT'

column1 = [
    [sg.Text('原始文本: ')],
    [sg.Multiline(size=(50, 30), focus=True, key=origin_text_key)],
]
column2 = [
    [sg.Text('格式化字典数据: ')],
    [sg.Multiline(size=(50, 30), key=format_text_key)],
]
layout = [
    [sg.Column(column1), sg.Button(format_btn_event, size=(10, 2)), sg.Column(column2)],
]

sg.ChangeLookAndFeel('GreenMono')
window = sg.Window('params format').Layout(layout)
while True:
    btn, values = window.Read()
    if btn is None:
        break
    elif btn == format_btn_event:
        origin_text = values[origin_text_key]
        lines = origin_text.splitlines()

        result = {}
        for line in lines:
            if not line:
                continue
            temp = re.split(r': *', line, maxsplit=1)
            if len(temp) == 2:
                k, v = temp
                if v:
                    try:
                        if v.find('.') > -1:
                            result[k] = float(v)
                        else:
                            result[k] = int(v)
                    except:
                        result[k] = v
                else:
                    result[k] = None
        
        format_text = json.dumps(result, indent=4)
        format_text = re.sub('null', 'None', format_text)
        window.FindElement(format_text_key).Update(format_text)

window.Close()

推荐阅读更多精彩内容