我正在编写一些简单的龙卷风原型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响应。
我在这里错过了任何设置吗?
答案 0 :(得分:1)
gzip
和zlib
都基于相同的底层压缩算法,但它们不是一回事。您必须使用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.decompressobj
和zlib.compressobj
一起使用来进行流压缩和解压缩。