2009-08-16 4 views

답변

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'); 
+0

참고 : 이것은 (7 월 08) LWP 5.814와 함께 작동 이상. –

+3

LWP 6.03을 테스트 한 결과 필요한 것은'content'보다는'decoded_content'를 사용하는 것이 전부였습니다. – Cas