Можно ли декодировать gzip при использовании функции зеркала в LWP Useragent? - PullRequest
1 голос
/ 02 ноября 2019

Могу ли я использовать что-то вроде $ response-> decoded_content в запросе LWP UserAgent 'mirror'? Спасибо.

1 Ответ

1 голос
/ 04 ноября 2019

При использовании mirror() полученные данные не добавляются непосредственно в объект ответа, а вместо этого записываются непосредственно в файл зеркала. Это означает, что decoded_content() не будет работать. Однако вы можете добавить response_header, который позволяет хранить полученные данные:

use strict;
use warnings;
use LWP::UserAgent ();

my $ua = LWP::UserAgent->new;

my $fn = 'libwww-perl-6.41.tar.gz';  # Example file..
my $url = 'https://cpan.metacpan.org/authors/id/O/OA/OALDERS/'. $fn;
$ua->add_handler(
    response_header => sub {
        my($response, $ua, $handler) = @_;
        $response->{default_add_content} = 1;
    }
);
my $response = $ua->mirror($url, $fn);
if ( $response->is_success ) {
    if ( $response->header('Content-Type') eq 'application/x-gzip') {
        $response->header('Content-Encoding' => 'gzip');
    }
    my $decoded_content = $response->decoded_content;
    # Do someting with the decoded content here ...
}
...