0

戻ってきました。:) 再び、URL の gzip 圧縮されたコンテンツを取得して、それらを gunzip しようとしています。今回はパイソンで。コードの #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 に答える