3

这两个版本都可以吗?还是更喜欢其中一个?

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

3 回答 3

3

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

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

于 2010-03-27T16:46:30.483 回答
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::Display。

于 2010-03-27T17:06:21.687 回答
1

$mech->content 专门在那里,因此您可以绕过必须获得结果响应。越简单越好。

于 2010-03-31T21:25:41.667 回答