You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成的zlib压缩二进制数据在PHP端无法解码的解决方案咨询

根因说明

你从Python控制台打印拿到的b'x\x9c\xabV*(\xcfK-R\xb2RP*I-.Q\xaa\x05\x004\x8c\x05\xc7'是Python bytes对象的可视化字符串表示,不是原始的二进制字节流。直接把这个字符串内容传入Postman请求时,实际发送的是带b'前缀、转义符、单引号后缀的普通文本,不是真实的压缩数据,自然解码失败。
手动替换单引号能临时生效本质是PHP中用双引号包裹字符串时,会自动解析字符串里的\x转义序列为对应的二进制字节,这只是测试场景下的特殊效果,无法用于生产环境。

可行解决方案(无需十六进制转换)

1. 手动Postman测试场景

Python侧导出原始二进制文件

不要用print输出bytes的字符串表示,直接将压缩后的二进制写入文件:

import json
import zlib

data = {"owner": "test"}
compressed = zlib.compress(json.dumps(data).encode("utf-8"))
# 写入二进制文件
with open("compressed.bin", "wb") as f:
    f.write(compressed)

Postman配置

  • 新建POST请求,进入「Body」标签页
  • 选择binary类型,点击「Select File」选择上一步生成的compressed.bin文件
  • 可按需添加请求头Content-Type: application/octet-stream,发送请求即可

PHP侧解码代码

直接读取请求原始输入流,无需任何字符串替换:

// 读取请求体原始二进制数据
$compressedData = file_get_contents('php://input');
// 直接解码
$result = json_decode(zlib_decode($compressedData), true);
// 输出验证
var_dump($result);

2. Python代码直接发请求场景

以requests库为例,直接将压缩后的bytes对象作为请求体发送即可:

import requests
import json
import zlib

data = {"owner": "test"}
compressed = zlib.compress(json.dumps(data).encode("utf-8"))
response = requests.post(
    "你的PHP接口地址",
    data=compressed,
    headers={"Content-Type": "application/octet-stream"}
)
print(response.text)

内容的提问来源于stack exchange,提问作者Mubbasher Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:09:07