Frage

Ich hole einige Seiten über das Web Perl LWP::UserAgent verwenden und so höflich wie möglich sein möchte. Standardmäßig handhaben ist LWP::UserAgent nicht nahtlos komprimierte Inhalte über gzip. Gibt es eine einfache Möglichkeit, es zu tun, so zu machen, zu speichern jedes einig Bandbreite?

War es hilfreich?

Lösung

LWP hat diese eingebaute Fähigkeit in dank HTTP::Message . Aber es ist etwas versteckt.

Zuerst stellen Sie sicher, Sie haben Compress::Zlib installiert, so dass Sie gzip verarbeiten kann. HTTP::Message::decodable() ausgibt, eine Liste von erlaubt Codierungen auf Basis der Module, die Sie installiert haben; in Skalarkontext, nimmt diese Ausgabe die Form eine durch Kommata abgegrenzte Zeichenfolge, die Sie mit dem 'Accept-Encoding' HTTP-Header, der a href <= "http://search.cpan.org/perldoc/LWP" rel = "noreferrer verwenden können „> LWP erfordert, dass Sie Ihr HTTP::Request es selbst. (Auf meinem System mit Compress::Zlib installiert ist, ist die Liste „gzip, x-gzip, deflate “.)

Wenn Sie Ihre HTTP::Response zurück kommt, müssen Sie den Inhalt mit $response->decoded_content zuzugreifen statt von $response->content.

LWP::UserAgent , es kommt alles zusammen wie folgt:

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;

Dies wird auch Text in der Perl Unicode-Strings dekodieren. Wenn Sie nur wollen LWP die Antwort zu dekomprimieren, und nicht mit Zohan an der Text, tun wie folgt:

print $response->decoded_content(charset => 'none');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top