I need to create an HTTP::Response with compressed data. How do I go about making the content gzipped? Do I just add the appropriate headers and compress it myself using Compress::Zlib? Or does any of the LWP modules provide a method for handling this?
Asked
Active
Viewed 4,149 times
3
-
[This perlmonks article](http://www.perlmonks.org/?node=858560) might be helpful. – maerics Jul 28 '11 at 23:43
-
See this question: http://stackoverflow.com/questions/1285305/how-can-i-accept-gzip-compressed-content-using-lwpuseragent – Leon Timmermans Jul 29 '11 at 10:20
-
These are about downloading gzipped content. My question is about serving gzipped content through my perl webserver. I have the content as say "abc 12345"; I need to send a gzipped version of it as an HTTP::Response to the client/browser. – mrburns Jul 30 '11 at 21:23
1 Answers
2
Is this what you need? You gzip the data, set the Content-encoding header, and send it off.
use strict;
use warnings;
use HTTP::Response;
use IO::Compress::Gzip qw(gzip);
my $data = q(My cat's name is Buster);
my $gzipped_data;
my $gzip = gzip \$data => \$gzipped_data;
print STDERR $gzipped_data;
my $response = HTTP::Response->new;
$response->code( 200 );
$response->header( 'Content-type' => 'text/plain' );
$response->header( 'Content-encoding' => 'gzip' );
$response->header( 'Content-length' => length $gzipped_data );
$response->content( $gzipped_data );
print $response->as_string;

brian d foy
- 129,424
- 31
- 207
- 592
-
Thanks for your answer but for some reason the browser is not able to decompress the gzip content. When debugging in Fiddler, I receive the error "The content could not be decompressed. The magic number in the GZip header is not correct. Make sure you are passing in a GZip stream". Any thoughts as to why this is? – HBCondo Dec 04 '19 at 09:44
-
@HBCondo - you'll have to ask another question and show your code. – brian d foy Dec 04 '19 at 18:55