
本文旨在解决 Python 使用 zlib 压缩数据并通过 POST 请求发送到 PHP 服务器后,PHP 无法正确解压缩的问题。我们将深入探讨数据传输过程中常见的错误,并提供一种无需十六进制转换即可在 PHP 端成功解压缩 Python 压缩数据的解决方案。
在 Python 和 PHP 之间传输压缩数据时,一个常见的错误是将压缩后的二进制数据错误地转换为字符串。print(compressed) 在 Python 中会将字节序列以其字符串表示形式输出,而不是原始的字节数据。这种字符串表示形式在 PHP 端无法被正确识别和解压缩。
正确的做法是直接发送原始的二进制数据。
以下是修正后的 Python 代码:
立即学习“PHP免费学习笔记(深入)”;
import jsonimport zlibimport requestsdata = {"owner": "test"}compressed_data = zlib.compress(json.dumps(data).encode("utf-8"))# 直接发送压缩后的二进制数据url = "your_php_server_url" # 替换为你的 PHP 服务器 URLheaders = {'Content-Type': 'application/octet-stream'} # 设置 Content-Type 为 application/octet-streamresponse = requests.post(url, data=compressed_data, headers=headers)print(response.text) # 打印 PHP 服务器的响应
注意:
Content-Type 头部设置为 application/octet-stream,这告诉服务器发送的是原始二进制数据。使用 requests.post 方法的 data 参数直接发送 compressed_data。
接下来,是 PHP 端的代码,用于接收和解压缩数据:
注意:
file_get_contents(‘php://input’) 用于获取 POST 请求的原始数据。zlib_decode() 函数用于解压缩数据。需要进行错误处理,检查解压缩和 JSON 解码是否成功。zlib_get_coding_type() 和 json_last_error_msg() 可以提供更详细的错误信息。
总结:
关键在于直接发送和接收二进制数据,避免在 Python 端将压缩后的数据转换为字符串。通过设置正确的 Content-Type 头部,并在 PHP 端使用 file_get_contents(‘php://input’) 获取原始数据,可以成功地在 Python 和 PHP 之间传输和解压缩 zlib 压缩的数据。 此外,添加适当的错误处理机制能够帮助你快速定位和解决问题。
以上就是从 Python 到 PHP 的 Gzip 解压缩二进制数据教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1289292.html
微信扫一扫
支付宝扫一扫