2011-07-19 4 views
0

私は帰ってきました。 :) URLのgzippedの内容を取得し、それらをgunzipしようとして再び。今回はPythonで説明します。コードの#SERVERセクションは、gzipされたデータを生成するために使用しているスクリプトです。データはJavaと同様に良好であることがわかっています。コードの#CLIENTセクションは、(最終的なJSON解析のために)クライアント側でそのデータを試して読み込むコードのビットです。しかし、この転送のどこかで、gzipモジュールは、作成したデータの読み方を忘れてしまいます。Gunzipping URLの内容 - Python

#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()

答えて

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)