LWP::UserAgent를 사용하여 gzip으로 압축된 콘텐츠를 어떻게 허용합니까?
-
18-09-2019 - |
문제
Perl을 사용하여 웹을 통해 일부 페이지를 가져오고 있습니다. LWP::UserAgent
그리고 최대한 예의바르게 대하고 싶습니다.기본적으로, LWP::UserAgent
gzip을 통해 압축된 콘텐츠를 원활하게 처리하지 않습니다.모든 사람의 대역폭을 절약할 수 있는 쉬운 방법이 있습니까?
해결책
LWP에는 다음과 같은 기능이 내장되어 있습니다. HTTP::Message
.하지만 조금 숨겨져 있습니다.
먼저 가지고 있는지 확인하세요 Compress::Zlib
처리할 수 있도록 설치되었습니다. gzip
. HTTP::Message::decodable()
설치한 모듈을 기반으로 허용되는 인코딩 목록을 출력합니다.스칼라 컨텍스트에서 이 출력은 '와 함께 사용할 수 있는 쉼표로 구분된 문자열 형식을 취합니다.Accept-Encoding
' HTTP 헤더, LWP
귀하의 HTTP::Request
-너 자신이야.(내 시스템에서는 Compress::Zlib
설치되어 있으면 목록은 "gzip
, x-gzip
, deflate
".)
언제 HTTP::Response
돌아오면 다음을 사용하여 콘텐츠에 액세스하세요. $response->decoded_content
대신에 $response->content
.
~ 안에 LWP::UserAgent
, 모든 것이 다음과 같이 결합됩니다.
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;
이는 또한 텍스트를 Perl의 유니코드 문자열로 디코딩합니다.만약 너라면 오직 원하다 LWP
응답의 압축을 풀고 텍스트를 엉망으로 만들지 않으려면 다음과 같이 하십시오.
print $response->decoded_content(charset => 'none');