in reply to Re: uncompress gzip data in a callback
in thread uncompress gzip data in a callback

Unfortunately the callback is provided with the encoded data. When using a callback no data is stored, so decoded_content returns nothing.
  • Comment on Re^2: uncompress gzip data in a callback

Replies are listed 'Best First'.
Re^3: uncompress gzip data in a callback
by pmqs (Friar) on May 04, 2010 at 10:04 UTC
    Try this
    use LWP::UserAgent; use Compress::Raw::Zlib; sub mkGunz { my $gun = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP); return sub { my $out; my $status = $gun->inflate($_[0], $out); if ($status == Z_OK || $status == Z_STREAM_END) { print $out; } else { die $status; } } ; } my $ua = LWP::UserAgent->new; my $URL = 'http://whatever/'; my $res = $ua->request(HTTP::Request->new(GET => $URL), mkGunz());

      Update: Closed: Dumb user error! See below.

      This does not seem to work. And I wonder how could it? Given that you pass $_[0] to inflate() each time, and the callback gets called with lots of little bits, none of which is decodable stand alone?

        It can accept lots of little bits of compressed data because that is what I designed Compress::Raw::Inflate to do. In the code I posted the $gun object that the mkGunz closure creates will maintain the context of the overall compressed data stream - that is the key part that allows it to be fed small snippets of compressed data a bit at a time.

        The code worked fine when I tried it before posting. How did you compress the data used in your origin server?