Декомпрессия Zlib выдает ошибку заголовка - Ruby - PullRequest
2 голосов
/ 09 февраля 2012

Мне нужна помощь по распаковке данных чанка из потокового API.Я подключаюсь к Gnip Stream API, который возвращает вывод JSON с использованием сжатия GZIP.Когда я пытаюсь распаковать выходные данные, он выдает мне следующую ошибку «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.

1 Ответ

3 голосов
/ 09 февраля 2012

По умолчанию zlib ищет заголовок zlib, а не заголовок gzip. Таким образом, заголовок gzip может вызвать неправильную проверку заголовка. Я не знаю, как выглядит интерфейс Ruby к zlib, но вы должны увидеть, можете ли вы указать тип потока для раздувания. Инфляция zlib поддерживает потоки zlib, gzip и raw deflate. Он также может автоматически определять потоки zlib и gzip.

...