我正在使用
data=urllib2.urlopen(url).read()我想知道:
发布于 2010-10-16 09:21:49
这将检查内容是否经过gzipped压缩并解压缩:
from StringIO import StringIO
import gzip
request = urllib2.Request('http://example.com/')
request.add_header('Accept-encoding', 'gzip')
response = urllib2.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
buf = StringIO(response.read())
f = gzip.GzipFile(fileobj=buf)
data = f.read()不是的。urllib2不会自动解压缩数据,因为'Accept-Encoding‘头不是由urllib2设置的,而是由您使用:request.add_header('Accept-Encoding','gzip, deflate')设置的
发布于 2010-10-16 09:28:21
如果你正在谈论一个简单的.gz文件,不,urllib2不会解码它,你会得到没有改变的.gz文件作为输出。
如果您正在谈论使用Content-Encoding: gzip或deflate的自动HTTP级压缩,那么这必须由客户端使用Accept-Encoding头故意请求。
urllib2没有设置这个头,所以它得到的响应将不会被压缩。您可以安全地获取资源,而不必担心压缩(尽管由于不支持压缩,请求可能需要更长的时间)。
发布于 2011-08-10 04:05:22
您的问题已经得到了回答,但要获得更全面的实现,请查看Mark Pilgrim's implementation of this,它涵盖了gzip、deflate、安全网址解析以及更多内容,这是一个广泛使用的RSS解析器,但仍然是一个有用的参考。
https://stackoverflow.com/questions/3947120
复制相似问题