【问题标题】:Gunzipping Contents of a URL - Python压缩 URL 的内容 - Python
【发布时间】:2011-07-19 18:32:56
【问题描述】:

我回来了。 :) 再次尝试获取 URL 的压缩内容并将其压缩。这次是在 Python 中。 #SERVER 代码部分是我用来生成 gzip 压缩数据的脚本。已知数据良好,因为它适用于 Java。 #CLIENT 代码部分是我使用客户端尝试读取该数据的代码(用于最终的 JSON 解析)。然而,在这个传输的某个地方,gzip 模块忘记了如何读取它创建的数据。

#SERVER
outbuf = StringIO.StringIO()
outfile = gzip.GzipFile(fileobj = outbuf, mode = 'wb')
outfile.write(data)
outfile.close()
print "Content-Encoding: gzip\n"
print outbuf.getvalue()

#CLIENT
urlReq = urllib2.Request(url)
urlReq.add_header('Accept-Encoding', '*')
urlConn = urllib2.build_opener().open(urlReq)
urlConnObj = StringIO.StringIO(urlConn.read())
gzin = gzip.GzipFile(fileobj = urlConnObj)
return gzin.read() #IOError: Not a gzipped file.

其他说明:

outbuf.getvalue() 等同于urlConnObj.getvalue() 等同于urlConn.read()

【问题讨论】:

    标签: python http gzip ioerror content-encoding


    【解决方案1】:

    This StackOverflow question 似乎帮助了我。

    显然,完全绕过 gzip 模块而选择 zlib 是明智之举。此外,将“Accept-Encoding”标头中的“*”更改为“gzip”可能会有所帮助。

    #CLIENT
    urlReq = urllib2.Request(url)
    urlReq.add_header('Accept-Encoding', 'gzip')
    urlConn = urllib2.urlopen(urlReq)
    return zlib.decompress(urlConn.read(), 16+zlib.MAX_WBITS)
    

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多