gpt4 book ai didi

python - 在Python中压缩通过CGI发送的JSON

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:42 27 4
gpt4 key购买 nike

我目前正在开发的 web 应用程序需要客户端请求大型 JSON 文件,使用 Python 在服务器上构建并发送回客户端。该解决方案是通过 CGI 实现的,并且在各个方面都工作正常。在这个阶段,我只是采用各种技术来最小化发送回客户端的结果 JSON 对象的大小,大约 5-10mb(无需详细说明,这或多或少是固定的,并且不能在任何情况下延迟加载)方式)。我们使用的主机不支持 mod_deflate 或 mod_gzip,因此虽然我们无法将 Apache 配置为使用 .htaccess 在服务器上自动创建 gzip 压缩内容,但我认为我们仍然能够在客户端上接收并解码只要内容编码 header 设置正确即可。

我想知道实现这一目标的最佳方法是什么。在 Python 中压缩某些东西是微不足道的。我已经知道该怎么做,但问题是:如何以这样的方式压缩数据,以便将其打印到输出流以通过 CGI 发送,既可以被压缩,又可以被客户端读取?

这些文件必须根据输入数据动态创建,因此不能存储预制和预压缩的文件,并且必须通过 web 应用程序中的 xhr 接收它们。

我最初的实验是使用 gzip 和 io.stringIO 压缩 JSON 字符串,然后将其打印到输出流,导致它以 Python 的正常字节格式打印,例如: b'\n\x91\x8c\xbc\xd4\xc6\xd2\x19\x98\x14x\x0f1q!\xdc|C\xae\xe0 等等,这使得请求膨胀到正常大小的两倍......

我想知道是否有人可以为我指明正确的方向,告诉我如何实现这一目标,如果确实可能的话。我希望我已经正确地表达了我的问题。谢谢。

最佳答案

我猜你使用 print() (它首先将其参数转换为字符串,然后将其发送到 stdout)或 sys.stdout (它只接受 str 对象) .

要直接在 stdout 上写入,您可以使用 sys.stdout.buffer,这是一个支持字节对象的类文件对象:

import sys
import gzip

s = 'foo'*100

sys.stdout.buffer.write(gzip.compress(s.encode()))

这给出了有效的 gzip 数据:

$ python3 foo.py | gunzip
foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo

关于python - 在Python中压缩通过CGI发送的JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com