您的位置 首页 编程知识

从 Python 到 PHP 的 Gzip 解压缩二进制数据教程

本文旨在解决 Python 使用 zlib 压缩数据并通过 POST 请求发送到 PHP 服务器后,PHP 无…

从 Python 到 PHP 的 Gzip 解压缩二进制数据教程

本文旨在解决 Python 使用 zlib 压缩数据并通过 POST 请求发送到 PHP 服务器后,PHP 无法正确解压缩的问题。我们将深入探讨数据传输过程中常见的错误,并提供一种无需十六进制转换即可在 PHP 端成功解压缩 Python 压缩数据的解决方案。

在 Python 和 PHP 之间传输压缩数据时,一个常见的错误是将压缩后的二进制数据错误地转换为字符串。print(compressed) 在 Python 中会将字节序列以其字符串表示形式输出,而不是原始的字节数据。这种字符串表示形式在 PHP 端无法被正确识别和解压缩。

正确的做法是直接发送原始的二进制数据。

以下是修正后的 Python 代码:

立即学习“”;

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 服务器的响应
登录后复制

注意:

  • Content-Type 头部设置为 application/octet-stream,这告诉服务器发送的是原始二进制数据。
  • 使用 requests.post 方法的 data 参数直接发送 compressed_data。

接下来,是 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);     } }  ?>
登录后复制

注意:

  • 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 解压缩二进制数据教程的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/12888.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部