【发布时间】:2010-12-24 06:23:02
【问题描述】:
我目前使用以下代码通过 urllib2 解压缩 gzipped 响应:
opener = urllib2.build_opener()
response = opener.open(req)
data = response.read()
if response.headers.get('content-encoding', '') == 'gzip':
data = StringIO.StringIO(data)
gzipper = gzip.GzipFile(fileobj=data)
html = gzipper.read()
它是否也处理放缩响应,还是我需要编写单独的代码来处理放缩响应?
【问题讨论】:
-
除非客户端使用 Accept-Encoding: 标头请求,否则 HTTP 服务器不应发送压缩响应。所以你不应该处理任何一个
-
在这种情况下,我在上面的代码之前添加了 req.add_header('Accept-Encoding', 'gzip,deflate') 。但是,如果我没有指定“Accept-Encoding”标头,有时 urllib2 会从 text/html url 返回二进制数据,并且无法在屏幕上打印。那么,您确定所有 http 服务器都不会发送没有“Accept-Encoding”标头的压缩响应吗?
-
urllib2 自动添加 Accept-Encoding: gzip, 创建默认请求对象时放气,所以这不是服务器的问题(虽然不知道如何关闭它)
-
如果可能,您应该从
Accept-Encoding中删除deflate。在此处的答案中查看我的 cmets:stackoverflow.com/questions/9170338/…。如果您必须接受deflate,那么您将需要尝试解码可能的编码,zlib 和 raw deflate。
标签: python gzip urllib2 deflate