2016-06-22 19 views
0

これだと思う:はデータ「ではないgzipで圧縮されたファイルを」gzipさが、私はそれが

H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ih7/Hu8WZXqZ101RLT/7aHe881GaL6fVrFhefPbRuj3fPvjo9zh63FTZ6tHp8jIvq1We0ivL5hE+++yjeduuHt2920zn+SJrxvQVPh9X9cVd/HI315fufqSvvWsK+9bV1dX46h433tvZ2b37e3/x/DUD2i6WTZstp7l7a3bzWx8pok+q2fXR45N5trzIn+fLi3b+1bJoX+XNqlo2in4ILZ80eX1ZTPPfe/zi9M1dAhR5e122R7ufjnce3tvff3x3oEH0C+6XvvKwk98NSY/+H/eQC6mIAQAA 

... WebサービスからのHTTPレスポンスのgzip圧縮されたボディです。私は、Pythonスクリプト内でこれを解凍したいので、私はこれが私のスクリプトでそのようDecompressing a gzipped payload of a packet with Python

として、ここでの前回の記事で示したものに類似のコード部分を使用しています

#!/usr/bin/env python 
import logging 
import gzip 
import StringIO 

logging.basicConfig(filename='out.log', level=logging.DEBUG) 

compressed_data = 'H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ih7/Hu8WZXqZ101RLT/7aHe881GaL6fVrFhefPbRuj3fPvjo9zh63FTZ6tHp8jIvq1We0ivL5hE+++yjeduuHt2920zn+SJrxvQVPh9X9cVd/HI315fufqSvvWsK+9bV1dX46h433tvZ2b37e3/x/DUD2i6WTZstp7l7a3bzWx8pok+q2fXR45N5trzIn+fLi3b+1bJoX+XNqlo2in4ILZ80eX1ZTPPfe/zi9M1dAhR5e122R7ufjnce3tvff3x3oEH0C+6XvvKwk98NSY/+H/eQC6mIAQAA' 

logging.debug(compressed_data) 

buf = StringIO.StringIO(compressed_data) 
f = gzip.GzipFile(fileobj=buf) 
decompressed_data = f.read() 

logging.debug(decompressed_data) 

...しかし、私が実行すると、Pythonはgzippedファイルではないことを報告します。

this online gzip/gunzip utilityを使用すると、文字列が正しく解凍されるため、私はかなり確信しています。 HTTP応答ヘッダーには、gzipでエンコードされているというメッセージもあります。また、テストツールを使用してサービスを呼び出すと、デコードされたコンテンツも表示されます。

ここでは省略したことを知りたいと思います。参考のため

、解凍した文字列は次のようになります。

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ChangeLengthUnitResponse xmlns="http://www.webserviceX.NET/"><ChangeLengthUnitResult>16.09344</ChangeLengthUnitResult></ChangeLengthUnitResponse></soap:Body></soap:Envelope> 

私は、Python 2.7.11を使用しています。 Rhymoidの提案@使用

+6

これはbase64でエンコードされたデータです。 base64でエンコードされたgzipで圧縮されたファイルである可能性もありますが、ガンゾリで圧縮する前にまずbase64でデコードする必要があります。 –

+2

ええ、私はすべてのASCIIの場合、それがgzipデータであるという方法はないと言うつもりでした。 –

答えて

1

、あなたのコードが(未テスト)のようになります。

#!/usr/bin/env python 
import logging 
import gzip 
import StringIO 
from base64 import b64decode 

logging.basicConfig(filename='out.log', level=logging.DEBUG) 

compressed_data = 'H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ih7/Hu8WZXqZ101RLT/7aHe881GaL6fVrFhefPbRuj3fPvjo9zh63FTZ6tHp8jIvq1We0ivL5hE+++yjeduuHt2920zn+SJrxvQVPh9X9cVd/HI315fufqSvvWsK+9bV1dX46h433tvZ2b37e3/x/DUD2i6WTZstp7l7a3bzWx8pok+q2fXR45N5trzIn+fLi3b+1bJoX+XNqlo2in4ILZ80eX1ZTPPfe/zi9M1dAhR5e122R7ufjnce3tvff3x3oEH0C+6XvvKwk98NSY/+H/eQC6mIAQAA' 

logging.debug(compressed_data) 

buf = StringIO.StringIO(b64decode(compressed_data)) 
f = gzip.GzipFile(fileobj=buf) 
decompressed_data = f.read() 

logging.debug(decompressed_data) 

base64.b64decode方法は、デコードされた文字列を返します。

+0

未テスト?何故なの? – martineau

+0

ええ、これは私が行方不明だったステップです。ありがとう –

+0

@ It'sMojitoTime実際には、それがbase64であることを伝える応答のHTTPヘッダーがあります。 –

関連する問題