gpt4 book ai didi

python - 如何在 wsgi 应用程序中使用 gzip 编码?

转载 作者:行者123 更新时间:2023-11-28 16:38:54 25 4
gpt4 key购买 nike

我正在尝试使用 wsgi 输出 gzip 编码的字符串,这些是我的尝试,但不幸的是浏览器只解码第一个字符串,有什么帮助吗?

测试 1:

import zlib

def application(environ, start_response):
headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
data = b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
data += zlib.compress(b'test')[:-4]
data += zlib.compress(b'test2')[:-4]
headers.append(('Content-Length', str(len(data))))
start_response('200 OK',headers)
return [data]

测试 2:

import zlib

def application(environ, start_response):
headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
data = b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
data += zlib.compress(b'test')
data += zlib.compress(b'test2')
headers.append(('Content-Length', str(len(data))))
start_response('200 OK',headers)
return [data]

测试 3:

import zlib

def application(environ, start_response):
headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
start_response('200 OK',headers)
yield b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
yield zlib.compress(b'test')[:-4]
yield zlib.compress(b'test2')[:-4]

测试 4:

import zlib

def application(environ, start_response):
headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
start_response('200 OK',headers)
yield b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
yield zlib.compress(b'test')
yield zlib.compress(b'test2')

测试 5:

import gzip

def application(environ, start_response):
headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
start_response('200 OK',headers)
yield gzip.compress(b'test')
yield gzip.compress(b'test2')

最佳答案

我认为问题如下:

 gzip.compress(b'test')

返回一个字符串

 header  content  THE END 

在里面。

这意味着当您阅读它时,解压缩将只返回 b'test'。亲自尝试。

两种解决方案取决于您想要实现的目标:

  1. 创建多部分消息。每一次产出都是一份新文件
  2. compress 这样做:

    def compress(data, compresslevel=9):

    """Compress data in one shot and return the compressed string.
    Optional argument is the compression level, in range of 0-9.
    """
    buf = io.BytesIO()
    with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel) as f:
    f.write(data)
    return buf.getvalue()

    做这样的事情:

    import gzip, io

    def application(environ, start_response):
    headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
    start_response('200 OK',headers)
    buf = io.BytesIO()
    with GzipFile(fileobj=buf, mode='wb') as f:
    f.write(b'test')
    f.write(b'test2')
    return buf

关于python - 如何在 wsgi 应用程序中使用 gzip 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22114321/

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