Don't you also need to adjust the content-length header
to match the new (uncompressed) content? 

---
David Carter
[EMAIL PROTECTED]




On Tue, 2 Dec 2003 13:37:06 -0400, "Brian Cassidy"
wrote:

> 
> Hi All,
> 
> Today I cooked up a little bit of code [1] to give
> WWW::Mechanize the
> ability to handle compressed content (gzip and
> deflate). I forwarded it over
> to Andy for his comments and he thought that maybe it
> would be best if this
> code was adapted for use directly in LWP.
> 
> I would tend to agree since everything is handled
> behind the scenes.
> + If Compress::Zlib isn't available, we forgo the
> "Accept_encoding" headers
> + It makes sure the response is compressed before
> trying to uncompress
> 
> The only (freak) edge case would be if you get a
> response that was encoded
> and Compress::Zlib isn't available (thus it
croak()s). 
> 
> There could be considerable bandwidth savings if LWP
> users were able to get
> compressed content by default (without even knowing it
> :). Although I guess
> therein hides the problem where we force people to
> accept compressed
> content.
> 
> Comments?
> 
> -Brian Cassidy ( [EMAIL PROTECTED] )
> 
> [1]
> 
> package WWW::Mechanize::Compress;
> 
> use strict;
> use warnings FATAL => 'all';
> use vars qw( $VERSION $HAS_ZLIB );
> $VERSION = '0.01';
> 
> use base qw( WWW::Mechanize );
> use Carp qw( carp croak );
> 
> BEGIN {
>       $HAS_ZLIB = 1 if defined eval "require
> Compress::Zlib;";
> }
> 
> sub _make_request {
>       my $self    = shift;
>       my $request = shift;
> 
>       $request->header( Accept_encoding => 'gzip; deflate'
)
> if $HAS_ZLIB;
> 
>       my $response = $self->SUPER::_make_request( $request,
> @_ );
> 
>       if ( my $encoding = $response->header(
> 'Content-Encoding' ) ) {
>               croak 'Compress::Zlib not found. Cannot uncompress
> content.'
> unless $HAS_ZLIB;
> 
>               $self->{ uncompressed_content } =
> Compress::Zlib::memGunzip(
> $response->content ) if $encoding =~ /gzip/i;
>               $self->{ uncompressed_content } =
> Compress::Zlib::uncompress( $response->content ) if
> $encoding =~ /deflate/i;
>       }
> 
>       return $response;
> }
> 
> sub content {
>       my $self = shift;
> 
>       return $self->{ uncompressed_content } || $self->{
> content };
> }
> 
> 1;
> 
> 
> http://www.gordano.com - Messaging for educators.

Reply via email to