Perl의 LWP::UserAgent
을 사용하여 웹에서 일부 페이지를 가져 오는 중이며 최대한 정중하게 보내고 자합니다. 기본적으로 LWP::UserAgent
은 gzip을 통해 압축 된 내용을 완벽하게 처리하지 않습니다. 모든 사람들이 대역폭을 절약 할 수있는 쉬운 방법이 있습니까?LWP :: UserAgent를 사용하여 gzip으로 압축 된 내용을 어떻게 받아 들일 수 있습니까?
20
A
답변
34
LWP에는 HTTP::Message
덕분에이 기능이 내장되어 있습니다. 그러나 그것은 약간 숨겨져 있습니다.
gzip
을 처리 할 수 있도록 먼저 Compress::Zlib
이 설치되어 있는지 확인하십시오. HTTP::Message::decodable()
은 설치 한 모듈을 기반으로 허용 된 인코딩 목록을 출력합니다. 스칼라 컨텍스트에서이 출력은 'Accept-Encoding
'HTTP 헤더와 함께 사용할 수있는 쉼표로 구분 된 문자열 형식을 취하며 LWP
은 자신을 HTTP::Request
-s에 추가해야합니다. (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;
이것은 또한 펄의 유니 코드 문자열로 텍스트를 디코딩합니다. 당신이 만 텍스트와 응답, 그리고 혼란의 압축을 LWP
을 원하는 경우에,과 같이 수행
print $response->decoded_content(charset => 'none');
참고 : 이것은 (7 월 08) LWP 5.814와 함께 작동 이상. –
LWP 6.03을 테스트 한 결과 필요한 것은'content'보다는'decoded_content'를 사용하는 것이 전부였습니다. – Cas