2

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

この問題に非常に近い可能性があります-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圧縮された出力は最初のチャンクには含まれません。では、gzipで圧縮された出力の必要なチャンクをすべて収集し、それらを解凍して、必要な単一のjson出力を取得するにはどうすればよいですか。

前もって感謝します。Veeraa。

4

1 に答える 1

3

デフォルトでは、zlib は gzip ヘッダーではなく、zlib ヘッダーを探します。そのため、gzip ヘッダーが原因でヘッダー チェックが正しく行われませんでした。zlib への Ruby インターフェイスがどのようなものかはわかりませんが、インフレートするストリームのタイプを指定できるかどうかを確認する必要があります。zlib の inflate は、zlib、gzip、および raw deflate ストリームをサポートしています。オプションで、zlib および gzip ストリームの自動検出も提供します。

于 2012-02-09T15:47:38.277 に答える