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。您很可能收到压缩的响应;它可以是 gzip
或 deflate
.
如果您的编码是 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",
# ...
}
我正在使用 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。您很可能收到压缩的响应;它可以是 gzip
或 deflate
.
如果您的编码是 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",
# ...
}