Gunzipping URL的内容 - Python

时间:2011-07-19 18:32:56

标签: python http gzip ioerror content-encoding

我回来了。 :)再次尝试获取URL的gzip压缩内容并对其进行gunzip。这次是在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()相同

1 个答案:

答案 0 :(得分:0)

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)