0

我回来了。:) 再次尝试获取 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()

4

1 回答 1

0

这个 StackOverflow 问题似乎对我有所帮助。

显然,完全绕过 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-07-19T19:06:04.650 回答