我使用以下Python代码从启用gzip压缩的服务器下载网页:
url = "http://www.v-gn.de/wbb/"
import urllib2
request = urllib2.Request(url)
request.add_header('Accept-encoding', 'gzip')
response = urllib2.urlopen(request)
content = response.read()
response.close()
import gzip
from StringIO import StringIO
html = gzip.GzipFile(fileobj=StringIO(content)).read()
这个方法通常可行,但对于指定的URL会出现
struct.error
异常。如果我使用带有“Accept-encoding”标头的wget,也会得到类似的结果。然而,浏览器似乎能够解压缩响应。因此我的问题是:是否有一种方法可以让我的Python代码在不禁用压缩(即删除“Accept-encoding”标头)的情况下解压HTTP响应?
为了完整起见,这是我用于wget的命令行:
wget --user-agent="Mozilla" --header="Accept-Encoding: gzip,deflate" http://www.v-gn.de/wbb/
readline()
而不是read()
可以解决该问题,在retrieve()
之外完成。 - itsadok