Zlib解压缩引发头错误 - Ruby

时间:2012-02-09 13:35:22

标签: ruby curl zlib gzipstream

我需要帮助解压缩流api中的块数据。我连接到Gnip流api,它使用gzip压缩返回json输出。当我尝试解压缩输出数据时,它会抛出以下错误“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'ed输出不会出现在第一个块中。 那么如何收集所有必需的gzip输出块并将其解压缩以获得所需的单个json输出。

先谢谢。 Veeraa。

1 个答案:

答案 0 :(得分:3)

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