Каков предпочтительный метод доступа к ответам WWW :: Mechanize? - PullRequest
3 голосов
/ 27 марта 2010

Обе эти версии в порядке или одна из них предпочтительнее?

#!/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;

Ответы [ 3 ]

3 голосов
/ 27 марта 2010

Они оба приемлемы. Второй вариант кажется мне чище, потому что он возвращает правильный объект HTTP :: Response , к которому можно обращаться и вызывать методы, а также означает, что если вы сделаете еще один запрос Mechanize , по-прежнему будет иметь доступ к старому HTTP-ответу. При первом подходе каждый раз, когда вы делаете запрос, метод content меняется на что-то новое, что может привести к ошибкам.

Кстати, для любого из этих методов вы должны проверить $response->is_success или $mech->success перед доступом к контенту, так как запрос может быть неудачным.

2 голосов
/ 27 марта 2010

Метод 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 :: Дисплей.

1 голос
/ 01 апреля 2010

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

...