Perl 访问WWW::Mechanize响应的首选方法是什么?
这两个版本都可以吗?还是其中一个更适合Perl 访问WWW::Mechanize响应的首选方法是什么?,perl,www-mechanize,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
#!/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;
它们都是可以接受的。第二个对我来说似乎更干净,因为它返回一个适当的对象,您可以查询和调用该对象上的方法,还意味着如果您发出另一个请求,您仍然可以访问旧的HTTP响应。在第一种方法中,每次发出请求时,
内容
方法都会更改为新的方法,这听起来很容易出错
顺便说一句,对于任何一种方法,您都应该在访问内容之前检查$response->is_success
或$mech->success
,因为请求可能失败。该方法有时更方便:
$mech->content(...)
返回mech在内部为获取的最后一页使用的内容。通常这与$mech->response()->content()相同,但如果“update_HTML”过载,和/或将额外命名的参数传递给content(),则HTML文档的情况可能有所不同:
返回页面的纯文本版本,并删除所有HTML标记。此功能要求安装HTML::TreeBuilder,否则将引发致命错误
$mech->content( base_href => [$base_href|undef] )
返回HTML文档,修改为在标题中包含标记$如果未指定,则base_href为$mech->base()。这对于将HTML传递到例如HTML::Display非常方便。$mech->内容专门在那里,因此您可以绕过获取结果响应的过程。越简单越好。来自perldoc:standalone WWW::Mechanize实例的自动检查已启用。但是,如果WWW::Mechanize是子类的,它就关闭了。哦,哇,上次我使用Mechanize时,这个选项不存在。那是在2008年。。。现在我觉得自己老了:(我添加autocheck是因为人们进入#perl IRC频道抱怨$mech->content是空的,因为他们懒得检查$mech->success。现在,最常见的情况是默认情况。$mech->content(format=>'text')在我的机器上不起作用。(安装了HTML::TreeBuilder)检查您的版本,您需要WWW::Mechanize 1.05_03或更高版本(2004年发布)好的,它可以工作,也许我尝试它时是trunk。但是最近有没有一个WWW::Mechanize版本,该功能不能与perl 5.10.0或5.10.1一起工作?
$mech->content( base_href => [$base_href|undef] )