HTTP 响应主体被混淆

HTTP response body is obfuscated

我正在使用 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()

如果响应出乎意料 'binary',请查看 Content-Encoding header。您很可能收到压缩的响应;它可以是 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)

除了其他答案之外,您还可以通过将 Accept-Encoding header 设置为 identity.

来禁用编码
headers = {
    # ...
    "Accept-Encoding": "identity",
    # ...
}