LWP::UserAgent를 사용하여 gzip으로 압축된 콘텐츠를 어떻게 허용합니까?

StackOverflow https://stackoverflow.com/questions/1285305

  •  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');
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top