2010-03-27 2 views
3

두 가지 버전 모두 괜찮습니까? 아니면 둘 중 하나를 선호합니까?WWW :: Mechanize 응답에 액세스하는 가장 좋은 방법은 무엇입니까?

#!/usr/bin/env perl 
use strict; 
use warnings; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(); 
my $content; 

# 1 
$mech->get('http://www.kernel.org'); 
$content = $mech->content; 
print $content; 

# 2 
my $res = $mech->get('http://www.kernel.org'); 
$content = $res->content; 
print $content; 

답변

2

content() 방법은 때때로 더 편리 :

$mech->content(...) 

은 기계화가 가져온 마지막 페이지에 대해 내부적으로 사용하는 컨텐츠를 돌려줍니다. 일반적으로 이것은 $ mech-> response() -> content()와 동일하지만 "update_html"이 오버로드되고 추가 이름 지정된 인수가 content()에 전달되는 경우 HTML 문서와 다를 수 있습니다.

$mech->content(format => 'text') 

모든 HTML 태그가 제거 된 텍스트 전용 버전의 페이지를 반환합니다. 이 기능을 사용하려면 HTML :: TreeBuilder가 설치되어 있어야합니다. 그렇지 않으면 치명적인 오류가 발생합니다.

$mech->content(base_href => [$base_href|undef]) 

헤더에 마크 업을 포함하도록 수정 된 HTML 문서를 반환합니다. $ base_href는 지정되지 않은 경우 $ mech-> base()입니다. HTML을 예를 들어 HTML로 전달하는 것이 편리합니다. HTML :: Display.

+0

$ mech-> content (format => 'text')가 내 컴퓨터에서 작동하지 않음 (HTML :: TreeBuilder가 설치됨) –

+0

버전을 확인하려면 WWW :: Mechanize 1.05_03 이상이 필요합니다. (2004 년 출시) – rjh

+0

확인해 보았습니다. 아마도 시도해 보았을 때 트렁크 였을 수도 있습니다.하지만 최근에는 WWW :: Mechanize- 버전에서이 기능을 사용할 수 없었습니다. perl 5.10.0 또는 5.10.1에서 작동합니까? –

3

이들은 모두 허용됩니다. 두 번째 것은 더 깨끗한 것처럼 보입니다. 왜냐하면 적절한 HTTP::Response 개체를 반환하기 때문에 쿼리하고 메서드를 호출 할 수 있으며, 또 다시 Mechanize 요청을하면 이전 HTTP 응답에 계속 액세스 할 수 있습니다. 첫 번째 방법을 사용하면 요청할 때마다 content 메소드가 새로운 것으로 변경되어 오류가 발생하기 쉬운 것으로 들립니다.

Btw 중 하나의 방법으로 콘텐츠에 액세스하기 전에 $response->is_success 또는 $mech->success을 확인해야합니다. 요청이 실패했을 수 있습니다.

+0

perldoc : 독립 실행 형 WWW :: Mechanize 인스턴스에서 자동 검사가 설정되어 있습니다. 그러나 WWW :: Mechanize가 하위 클래스로 분류되면 해제됩니다. –

+1

오 와우, 내가 Mechanize를 마지막으로 사용했을 때, 그 옵션은 존재하지 않았다. 그것은 2008 년이었습니다 ... 지금은 나이가 들었습니다. ( – rjh

+0

사람들이 #perl IRC 채널에 와서 $ mech-> content가 비어 있다고 불평하는 것이 얼마나 비일상적인지 자동 검사를 추가했습니다. $ mech-> success.를 확인하는 데 귀찮았습니다. 이제는 가장 일반적인 경우가 기본값입니다. –

1

$ mech-> content가 있으므로 응답 결과를 얻지 않아도됩니다. 더 간단할수록 좋습니다.

관련 문제