用do_GET可以获取页面,专门一个chapter来说明do_GET,因为它比较重要。
关于do_GET的说明,它同head一样,可以在标量环境和列表环境中使用。即:
doc = do_GET(URL [header, value, ...]);
或者
(doc, status, successful, response) = do_GET(URL [header, value, ...]);
在标量环境中,do_GET返回整个页面或者出错时返回undef;在列表环境中,不仅返回页面文档(如果存在的话),同时也会返回HTTP响应头信息、 一个表示HTTP请求是否成功的Bool值以及一个可以从中得到更多有关响应信息的对象。左边的变量使用undef代替,表示丢弃等号右边对应的返回值。
看起来do_GET的使用同LWP::Simple一样简单。我们来试试。
【使用do_GET()】
例2-3 使用do_GET()
#!/usr/bin/perl -w
use strict;
use URI::Escape;
use LWP;
foreach my $word (@ARGV) {
next unless length $word; # 合法性检验
my $url = 'http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista&q='
. uri_escape($word) . '&kl=XX%2527%3b';
my ($content, $status, $is_success) = do_GET($url);
if (!$is_success) {
print "Sorry, failed: $status/n";
} elsif ($content =~ m/>([0-9,]+)/) { # like "1,952"
print "$word: $1 matches/n";
} else {
print "$word: Page not processable, at $url/n";
}
sleep 2; # Be nice to AltaVista's servers!!!
}
my $browser;
sub do_GET {
$browser = LWP::UserAgent->new unless $browser; #创建浏览器对象
my $resp = $browser->get(@_); #发送get请求
return ($resp->content, $resp->status_line, $resp->is_success, $resp)
if wantarray; #返回值上下文环境为列表,则返回数组(内容,状态码,是否成功,返回值)
return unless $resp->is_success; #get请求失败则直接返回
return $resp->content; # 标量上下文环境中,返回服务器返回的内容
}
这段代码完成的工作是在这个搜索网站,输入一些关键词,获得匹配的数目。打印的结果为:
想来这段代码很方便的,比如你想比较同样的关键词,不同的搜索引擎找出的结果是多少,相对的改一改match和URL就可以了。