2012-02-09 2 views
2

스트림 API에서 청크 데이터의 압축을 푸는 데 도움이 필요합니다. gnip 스트림 api에 연결하여 gson 압축을 사용하여 json 출력을 반환합니다. 출력 데이터의 압축을 풀려고하면 "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 출력은 첫 번째 청크에 들어 가지 않습니다. 그래서 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