通过 Reqable 处理 MessagePack 请求与响应:实战指南与代码优化技巧
在Web 开发和 API 调试中,经常需要处理各种数据格式的请求和响应,而其中有个特殊的格式就是
application/msgpack。
MessagePack作为一种高效的二进制序列化格式,因其体积小、解析快的特点,在高性能 API 通信中越来越受欢迎。
可是,当我们在着手调试时中看到是二进制格式的数据,往往难以阅读和分析。
本文将介绍如何通过 Reqable 工具,实现 MessagePack 与 JSON 格式之间的自动转换,提升调试效率。
一、为什么需要处理 MessagePack
- 调试痛点:MessagePack 是二进制格式,直接在抓包工具中显示为乱码,难以阅读和分析
- 开发需求:后端服务使用 MessagePack 作为通信格式,但前端开发更习惯 JSON 格式
- 测试场景:需要模拟 MessagePack 格式的请求,但手动构造二进制数据十分困难
二、核心解决方案概述
通过 Reqable 的脚本拦截器功能,我们可以实现:
- 请求阶段:将 JSON 格式的请求体转换为 MessagePack 二进制
- 响应阶段:将 MessagePack 二进制响应自动转换为可读的 JSON 格式
- 无缝转换:开发人员无需手动处理二进制数据,像调试 JSON 一样调试 MessagePack
三、脚本代码详解
import msgpack
import json
from reqable import *
def onRequest(context, request):
"""
拦截请求,将 JSON POST 请求的 body 转为 MessagePack 格式
"""
# 判断是否为 JSON 类型的 POST 请求
isJson = request.contentType == 'application/json'
isPost = request.method == 'POST'
if isJson and isPost:
try:
# 获取原始 JSON 字符串
bodyRaw = request.body.payload
# 解析为 Python 字典
dataDict = json.loads(bodyRaw)
# 将字典打包为 MessagePack 二进制
msgpackBin = msgpack.packb(dataDict)
# 修改请求头和 body
request.headers['content-type'] = 'application/msgpack'
request.body.binary(msgpackBin)
except Exception as e:
# 记录异常,不中断流程
print(f"在`重写请求`时,发生错误:{e}")
return request
def onResponse(context, response):
"""
拦截响应,将 MessagePack 格式的响应 body 转为文本
"""
# 判断是否为 MessagePack 类型的响应
contentType = response.contentType.lower()
isMsgpack = contentType == 'application/msgpack' or contentType == 'application/x-msgpack'
if isMsgpack:
try:
# 获取响应数据(返回是多态的,需要做类型判断)
bodyPayload = response.body.payload
# 处理不同类型的 payload(可能是字符串或二进制)
if isinstance(bodyPayload, str):
bodyBin = bodyPayload.encode('latin-1')
elif isinstance(bodyPayload, bytes):
bodyBin = bodyPayload
else:
raise TypeError("不支持的数据类型")
# 解包为 Python 对象
unpackedData = msgpack.unpackb(bodyBin, raw=False)
# 将解包后的对象转为字符串并替换 body
response.body.text(unpackedData)
except Exception as e:
# 记录异常,不中断流程
print(f"在`重写响应`时,发生错误:{e}")
return response
四、使用方法
-
安装 Reqable 和 Python3(包含 pip)
-
安装
msgpack库pip install msgpack -
配置脚本环境、创建脚本:在 Reqable 中新建脚本拦截器,粘贴上述代码

-
配置规则:设置脚本应用于特定域名或所有请求,并启用脚本 或者 项目文件夹设置脚本


按文件夹设置脚本

-
开始调试:
发送 JSON 格式请求,自动转换为 MessagePack 发出
接收 MessagePack 响应,自动转换为 JSON 显示
五、效果展示
启用脚本前

启用脚本后


浙公网安备 33010602011771号