2010-03-27 2 views
3

Оба эти варианта в порядке или один из них предпочитает?Каков предпочтительный метод доступа к WWW :: Механизировать ответы?

#!/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(), но это может различаться для документов HTML, если «update_html» перегружен, и/или дополнительные именованные аргументы передаются в content():

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

Возвращает текстовую версию страницы, при этом вся разметка HTML разделяется. Эта функция требует установки HTML :: TreeBuilder, или будет вызвана фатальная ошибка.

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

Возвращает HTML-документ, модифицированный, чтобы содержать надпись в заголовке. $ base_href - это $ mech-> base(), если не указано. Это удобно для передачи HTML, например. HTML :: Display.

+0

$ mech-> content (format => 'text') не работает с моей машиной. (HTML :: TreeBuilder установлен) –

+0

Проверьте свою версию, вам нужно WWW :: Mechanize 1.05_03 или выше (выпущено в 2004 году) – rjh

+0

ОК, это работает, может быть, я был багажником, когда я это пробовал. Но недавно была версия WWW :: Mechanize, t работать с 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

Я добавил автокрест из-за того, что, как ни странно, люди приходили в канал IRC#perl и жаловались, что содержимое $ mech-> было пустым, потому что они не –

1

$ mech-> Контент определенно существует, поэтому вы можете обойтись, чтобы получить ответ на результат. Чем проще, тем лучше.