访问WWW :: Mechanize响应的首选方法是什么?

时间:2010-03-27 16:33:25

标签: perl 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;

3 个答案:

答案 0 :(得分:3)

他们都是可以接受的。第二个对我来说似乎更干净,因为它返回一个正确的HTTP::Response对象,你可以查询和调用方法,也意味着如果你再发出一个Mechanize请求,你仍然可以访问旧的HTTP响应。使用第一种方法,每次发出请求时,content方法都会更改为新的,这听起来容易出错。

顺便说一句,对于这两种方法,您都应该在访问内容之前检查$response->is_success$mech->success,因为请求可能已失败。

答案 1 :(得分:2)

content()方法有时更方便:

$mech->content(...)

返回mech在内部用于获取的最后一页的内容。通常这与$ 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 ::显示。

答案 2 :(得分:1)

$ mech->内容特别存在,因此您可以绕过必须获得结果响应。它越简单越好。