
本文旨在解决 Python 使用 zlib 压缩数据并通过 POST 请求发送到 PHP 服务器后,PHP 无法正确解压缩的问题。我们将深入探讨数据传输过程中常见的错误,并提供一种无需十六进制转换即可在 PHP 端成功解压缩 Python 压缩数据的解决方案。
在 Python 和 PHP 之间传输压缩数据时,一个常见的错误是将压缩后的二进制数据错误地转换为字符串。print(compressed) 在 Python 中会将字节序列以其字符串表示形式输出,而不是原始的字节数据。这种字符串表示形式在 PHP 端无法被正确识别和解压缩。
正确的做法是直接发送原始的二进制数据。
以下是修正后的 Python 代码:
立即学习“PHP免费学习笔记(深入)”;
import json
import zlib
import requests
data = {"owner": "test"}
compressed_data = zlib.compress(json.dumps(data).encode("utf-8"))
# 直接发送压缩后的二进制数据
url = "your_php_server_url" # 替换为你的 PHP 服务器 URL
headers = {'Content-Type': 'application/octet-stream'} # 设置 Content-Type 为 application/octet-stream
response = requests.post(url, data=compressed_data, headers=headers)
print(response.text) # 打印 PHP 服务器的响应注意:
接下来,是 PHP 端的代码,用于接收和解压缩数据:
<?php
// 获取原始 POST 数据
$compressed_data = file_get_contents('php://input');
// 尝试解压缩数据
$decompressed_data = zlib_decode($compressed_data);
if ($decompressed_data === false) {
// 解压缩失败
echo "解压缩失败: " . zlib_get_coding_type(); // 获取错误类型
} else {
// 解压缩成功
$data = json_decode($decompressed_data, true);
if ($data === null) {
// JSON 解码失败
echo "JSON 解码失败: " . json_last_error_msg();
} else {
// 数据处理
print_r($data);
}
}
?>注意:
总结:
关键在于直接发送和接收二进制数据,避免在 Python 端将压缩后的数据转换为字符串。通过设置正确的 Content-Type 头部,并在 PHP 端使用 file_get_contents('php://input') 获取原始数据,可以成功地在 Python 和 PHP 之间传输和解压缩 zlib 压缩的数据。 此外,添加适当的错误处理机制能够帮助你快速定位和解决问题。
以上就是从 Python 到 PHP 的 Gzip 解压缩二进制数据教程的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号