2012-02-09 7 views
2

ストリームAPIからのチャンクデータを解凍するのに助けが必要です。私はgzip圧縮を使用してjson出力を返すGnipストリームapiに接続しています。出力データを圧縮解除しようとすると、次のエラー「Zlib :: DataError:不正なヘッダーのチェック」がスローされます。Zlib解凍でヘッダーエラーがスローされる - Ruby

それは、この問題に非常に近いかもしれない - http://groups.google.com/group/nodejs/browse_thread/thread/32b9ee7f691a68d9

ここで私はあなたの参照のための私のコードスニペットを添付:

require 'rubygems' 
require 'curl' 
require 'stringio' 
require 'zlib' 
url = "https://stream.gnip.com:443/accounts/SomeGroup/publishers/twitter/streams/track/Prod.json" 
crl = Curl::Easy.new(url) 
crl.headers={"Authorization"=>"Basic dmVlcmFzd5kYXJhdmVsLRoaX1Z25hbmFzd5kYhbU4ZXJeC5b26GpbFnW0MzIy", "Accept-Encoding" => "deflate, gzip"} 
zstream = Zlib::Inflate.new 
crl.on_body { |data| zstream.inflate(data);} 
crl.http_get 

上記のコードは必ず返す「のZlib :: DataError:間違ったヘッダチェックを」 。私はgnipがチャンクによってデータチャンクを返すので、必要なgzip'ed出力が最初のチャンクにはないことを知っています。 これで、gzipされた出力のすべての必要なチャンクを収集し、必要な単一のjson出力を得るためにそれらを圧縮解除するにはどうすればよいですか?

ありがとうございました。 Veeraa。

答えて

3

デフォルトでは、zlibはgzipヘッダーではなくzlibヘッダーを探しています。そのため、gzipヘッダーが誤ったヘッダーチェックを引き起こします。私はzlibのRubyインターフェースがどのようなものかはわかりませんが、あなたが膨らませるストリームのタイプを指定できるかどうかを知るべきです。 zlibのinflateは、zlib、gzip、およびraw deflateストリームをサポートします。オプションとして、zlibとgzipストリームの自動検出も提供します。

+0

'Zlib :: Inflate.new'の' window_bits'パラメータはzlibに直接渡されるので、zlibの 'windowBits'と全く同じ意味を持ちます。だから私は31(最大ウィンドウサイズとgzip)または47(自動検出で最大ウィンドウサイズ)の値を試してみましょう。 – L2G

関連する問題