HTTP响应主体被混淆

时间:2015-01-28 16:58:32

标签: python http

我使用httplib.HTTPConnection提交HTTP POST请求。我得到200响应状态,但响应数据看起来模糊不清。 当我在Firefox中提交请求时,响应显示正常。

conn = httplib.HTTPConnection("www.foo.com")
conn.request('POST', '/foo', postdata, headers)
resp = conn.getresponse()
conn.close()
print resp.read()

2 个答案:

答案 0 :(得分:1)

如果响应是意外的“二进制”,请查看Content-Encoding标头。很可能你会得到压缩响应;它可以是gzipdeflate

如果编码为gzip,请使用以下代码对其进行解码:

import zlib

decompressor = zlib.decompressobj(16 + zlib.MAX_WBITS)
data = decompressor.decompress(response_body)

对于deflate,您必须同时尝试使用默认压缩器和使用-zlib.MAX_WBITS的压缩器:

try:
    decompressor = zlib.decompressobj()
    data = decompressor.decompress(response_body)
except zlib.error:
    decompressor = zlib.decompressobj(-zlib.MAX_WBITS)
    data = decompressor.decompress(response_body)

答案 1 :(得分:0)

除了其他答案之外,您可以通过将Accept-Encoding标头设置为headers = { # ... "Accept-Encoding": "identity", # ... } 来禁用编码。

{{1}}