python - 这个 gzip 格式有什么问题?

标签 python http gzip

我使用以下 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 异常。 如果我将 wget 与“Accept-encoding” header 一起使用,我会得到类似的结果。然而,浏览器似乎能够解压缩响应。

所以我的问题是:有没有办法让我的 python 代码解压缩 HTTP 响应,而无需通过删除“Accept-encoding” header 来禁用压缩?

为了完整起见,这是我用于 wget 的行:

wget --user-agent="Mozilla" --header="Accept-Encoding: gzip,deflate" http://www.v-gn.de/wbb/

最佳答案

看来您可以在 gzip.GzipFile 对象上调用 readline(),但是 read() 引发了一个 struct.error 因为文件突然结束。

因为 readline 有效(除了最后),你可以这样做:

import urllib2
import StringIO
import gzip
import struct

url = "http://www.v-gn.de/wbb/"
request = urllib2.Request(url)
request.add_header('Accept-encoding', 'gzip')
response = urllib2.urlopen(request)
content = response.read()
response.close()
fh=StringIO.StringIO(content)
html = gzip.GzipFile(fileobj=StringIO.StringIO(content))
try:
    for line in html:
        line=line.rstrip()
        print(line)
except struct.error:
    pass

关于python - 这个 gzip 格式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3652177/

相关文章:

python - 如何在 Google Cloud Run 中生成 Blob 签名 url?

python - 由对等方重置连接 - reddit api

Python:如何发送多个 HTTP 请求并接收响应?

java - Java 和 AS3 之间的 GZip 压缩?

python - 长时间闲置后pygame混音器音乐ogg播放失真

python - 如何计算图像中的错误?

javascript - 用于低延迟网页游戏的 HTTP 或 Websocket?

java - python和php中提交html表单很简单,新手用java可以吗?

http - 是否有任何浏览器支持 HTML 5's Canvas that don' t 默认为 gzip 的 'Accept-Encoding'?

java - GZIPInputStream .read() 限制