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 输出。

提前致谢。维拉。

4

1 回答 1

3

默认情况下,zlib 正在寻找 zlib 标头,而不是 gzip 标头。所以 gzip 标头会导致错误的标头检查。我不知道 zlib 的 Ruby 接口是什么样的,但你应该看看是否可以指定要膨胀的流的类型。zlib 的 inflate 支持 zlib、gzip 和 raw deflate 流。它还可选地提供 zlib 和 gzip 流的自动检测。

于 2012-02-09T15:47:38.277 回答