龙卷风Web应用程序无法解码压缩的http正文

时间:2016-09-27 20:12:44

标签: python http tornado

我正在编写一些简单的龙卷风原型web应用程序,发现龙卷风未能解析http请求体

Error -3 while decompressing: incorrect header check

从龙卷风网络应用程序之一,我通过使用zlib压缩身体发送http请求。

http_body = zlib.compress(data)

还添加了http header:

'Content-Encoding': 'gzip' 

但是,当我在另一个龙卷风Web应用程序中收到此http请求时,我发现它会导致如上所述的解压缩失败。

用于处理http请求的示例代码:

class MyRequestHandler(tornado.web.RequestHandler):
    def post(self):
        global num
        message = self.request.body
        self.set_status(200)

当应用程序监听时,我还确保 decompress_request = True

我检查过龙卷风文档和之前的帖子,没有发现有关压缩的http正文部分或其任何示例的信息。唯一提到的是decompress_response参数,它只能确保来自服务器的压缩http响应。

我在这里错过了任何设置吗?

1 个答案:

答案 0 :(得分:1)

gzipzlib都基于相同的底层压缩算法,但它们不是一回事。您必须使用gzip而不仅仅是zlib

def post_gzip(self, body):
    bytesio = BytesIO()
    gzip_file = gzip.GzipFile(mode='w', fileobj=bytesio)
    gzip_file.write(utf8(body))
    gzip_file.close()
    compressed_body = bytesio.getvalue()
    return self.fetch('/', method='POST', body=compressed_body,
                      headers={'Content-Encoding': 'gzip'})

某些zlib函数也会使用神秘的选项,导致它们生成gzip - 格式输出。这些可以与zlib.decompressobjzlib.compressobj一起使用来进行流压缩和解压缩。