一、为什么需要处理 MessagePack调试痛点MessagePack 是二进制格式直接在抓包工具中显示为乱码难以阅读和分析开发需求后端服务使用 MessagePack 作为通信格式但前端开发更习惯 JSON 格式测试场景需要模拟 MessagePack 格式的请求但手动构造二进制数据十分困难二、核心解决方案概述通过 Reqable 的脚本拦截器功能我们可以实现请求阶段将 JSON 格式的请求体转换为 MessagePack 二进制响应阶段将 MessagePack 二进制响应自动转换为可读的 JSON 格式无缝转换开发人员无需手动处理二进制数据像调试 JSON 一样调试 MessagePack三、脚本代码详解import msgpackimport jsonfrom reqable import *def onRequest(context, request):拦截请求将 JSON POST 请求的 body 转为 MessagePack 格式# 判断是否为 JSON 类型的 POST 请求isJson request.contentType application/jsonisPost request.method POSTif isJson and isPost:try:# 获取原始 JSON 字符串bodyRaw request.body.payload# 解析为 Python 字典dataDict json.loads(bodyRaw)# 将字典打包为 MessagePack 二进制msgpackBin msgpack.packb(dataDict)# 修改请求头和 bodyrequest.headers[content-type] application/msgpackrequest.body.binary(msgpackBin)except Exception as e:# 记录异常不中断流程print(f在重写请求时发生错误{e})return requestdef onResponse(context, response):拦截响应将 MessagePack 格式的响应 body 转为文本# 判断是否为 MessagePack 类型的响应contentType response.contentType.lower()isMsgpack contentType application/msgpack or contentType application/x-msgpackif isMsgpack:try:# 获取响应数据返回是多态的需要做类型判断bodyPayload response.body.payload# 处理不同类型的 payload可能是字符串或二进制if isinstance(bodyPayload, str):bodyBin bodyPayload.encode(latin-1)elif isinstance(bodyPayload, bytes):bodyBin bodyPayloadelse:raise TypeError(不支持的数据类型)# 解包为 Python 对象unpackedData msgpack.unpackb(bodyBin, rawFalse)# 将解包后的对象转为字符串并替换 bodyresponse.body.text(unpackedData)except Exception as e:# 记录异常不中断流程print(f在重写响应时发生错误{e})return response四、使用方法安装 Reqable 和 Python3(包含 pip)ReqablePython安装msgpack库pip install msgpack配置脚本环境、创建脚本在 Reqable 中新建脚本拦截器粘贴上述代码配置规则设置脚本应用于特定域名或所有请求并启用脚本 或者 项目文件夹设置脚本按文件夹设置脚本开始调试发送 JSON 格式请求自动转换为 MessagePack 发出接收 MessagePack 响应自动转换为 JSON 显示五、效果展示启用脚本前启用脚本后