【Chapter3】LWP的do_GET

 用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就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值