Question

Je suis aller chercher quelques pages sur le Web à l'aide de LWP::UserAgent de Perl et voudrais être aussi poli que possible. Par défaut, LWP::UserAgent ne gère pas de façon transparente le contenu compressé via gzip. Est-il un moyen facile de le faire faire, pour sauver tout le monde de la bande passante?

Était-ce utile?

La solution

LWP a cette capacité intégrée, grâce à HTTP::Message . Mais il est un peu caché.

D'abord assurez-vous que vous avez Compress::Zlib installé afin que vous puissiez gérer gzip. HTTP::Message::decodable() affichera une liste de a permis encodages en fonction des modules que vous avez installés; dans un contexte scalaire, cette sortie prend la forme d'une chaîne délimitée par des virgules que vous pouvez utiliser avec le « Accept-Encoding » en-tête HTTP, qui HTTP::Request vous -s. (Sur mon système, avec Compress::Zlib installé, la liste est « gzip, x-gzip, deflate ».)

HTTP::Response revient, assurez-vous d'accéder au contenu de la place $response->decoded_content de $response->content.

LWP::UserAgent , tout se ensemble comme ceci:

my $ua = LWP::UserAgent->new;
my $can_accept = HTTP::Message::decodable;
my $response = $ua->get('http://stackoverflow.com/feeds', 
    'Accept-Encoding' => $can_accept,
);
print $response->decoded_content;

Cela permettra également de décoder le texte aux chaînes unicode de Perl. Si vous uniquement LWP pour décomprimer la réponse, et non mess avec le texte, faire comme ceci:

print $response->decoded_content(charset => 'none');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top