设为首页 收藏本站
查看: 1066|回复: 0

[经验分享] perl LWP:UserAgent用法

[复制链接]

尚未签到

发表于 2018-8-31 10:27:18 | 显示全部楼层 |阅读模式
  LWP::UserAgent
  用法:
  require LWP::UserAgent;
  
  my $ua = LWP::UserAgent->new;
  $ua->timeout(10);
  $ua->env_proxy;
  
  my $response = $ua->get('http://search.cpan.org/');
  
  if ($response->is_success) {
      print $response->content;  # or whatever
  }
  else {
      die $response->status_line;
  }
  LWP::UserAgent是一个模拟用户浏览器的类,在使用的时候得首先创建一个LWP::UserAgent的对象,然后再设置这个对象的相关参数,它然后再创建HTTP::Request实例,并发送请求,并返回HTTP::Response对象。
  1.创建LWP::UserAgent对象
  $ua = LWP::UserAgent->new( %options )
  options的键值如下:
    KEY                     DEFAULT
    -----------             --------------------
    agent                   "libwww-perl/#.##"
    from                    undef
    conn_cache              undef
    cookie_jar              undef
    default_headers         HTTP::Headers->new
    max_size                undef
    max_redirect            7
    parse_head              1
    protocols_allowed       undef
    protocols_forbidden     undef
    requests_redirectable   ['GET', 'HEAD']
    timeout                 180
  另外,如果env_proxy的值设为真,那么代理设置将有效(参见env_proxy());如果keep_alive为真,那么LWP::ConnCache将建立(参见conn_cache())。
  $ua->clone  返回LWP::UserAgent对象的一个拷贝
  2.LWP::UserAgent对象属性
  2.1 $ua->agent
  $ua->agent( $product_id )
  用来返回或者设置用户的agent,用来在header中告诉服务器你用的是什么"浏览器",设置文件头的User-Agent。缺省值是 _agent()返回的字符串。如果$product_id以空格结尾,那么_agent()的返回值将加到$product_id后面。user-agent必须是以/分割的浏览器名+版本号,如:
   $ua->agent('Checkbot/0.4 ' . $ua->_agent);
   $ua->agent('Checkbot/0.4 ');    # same as above
   $ua->agent('Mozilla/5.0');

   $ua->agent("");                 # don't>  $ua->_agent返回缺省的agent值,形如"libwww-perl/#.##"
  2.2 $ua->from
  $ua->from( $email_address )
  返回或者设置发起请求的人的邮件地址,设置文件头的from。如:
  $ua->from('gaas@cpan.org');
  默认设置是不发送from键值
  2.3 $ua->cookie_jar
  $ua->cookie_jar( $cookie_jar_obj )
  返回或者设置cookie,在运行过程中必须执行两个方法,extract_cookies($request) 和 add_cookie_header($response)。在运行的过程中实际用到了HTTP::Cookies模块。如:
   $ua->cookie_jar({ file => "$ENV{HOME}/.cookies.txt" });
  等价于
   require HTTP::Cookies;
   $ua->cookie_jar(HTTP::Cookies->new(file => "$ENV{HOME}/.cookies.txt"));
  2.4 $ua->default_headers
  $ua->default_headers( $headers_obj )
  设置或返回每一次请求的headers值,缺省是一个空的HTTP::Headers 对象
   $ua->default_headers->push_header('Accept-Language' => "no, en");
  $ua->default_header( $field )
  $ua->default_header( $field => $value )
  如:
  my %headers=('Accept'=>'image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/QVOD, */*',
  'Accept-Language'=>'zh-cn',
  'User-Agent'=>'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)',
  'Accept-Charset' => 'iso-8859-1,*,utf-8');
  my $response = $browser->get($url,%headers);
  2.5 $ua->conn_cache
  $ua->conn_cache( $cache_obj )
  设置或返回LWP::ConnCache 对象
  2.6 $ua->credentials( $netloc, $realm, $uname, $pass )
  设置访问一个域的时候的用户名和密码
  2.7 $ua->max_size
  $ua->max_size( $bytes )
  设置或返回响应内容的大小。缺省是undef,意思是不限制。
  2.8 $ua->max_redirect
  $ua->max_redirect( $n )
  设置或返回被请求页面所跳转的最大次数。默认为7
  2.9 $ua->parse_head
  $ua->parse_head( $boolean )
  设置或返回是否我们初始化响应的HTML的标签内容。默认是TRUE,不要将这个值关闭,除非你知道你在做什么。
  2.10 $ua->protocols_allowed
  $ua->protocols_allowed( \@protocols )
  设置或返回发起请求的方法,方法名对大小写敏感。例如$ua->protocols_allowed( [ 'http', 'https'] ); 表明该用户只允许这两种协议。如果用其他的协议访问URL(like "ftp://...")将会导致500错误
  删除这个设置的方法: $ua->protocols_allowed(undef)
  2.11 $ua->protocols_forbidden
  $ua->protocols_forbidden( \@protocols )
  与2.10类似
  2.12 $ua->requests_redirectable
  $ua->requests_redirectable( \@requests )
  push @{ $ua->requests_redirectable }, 'POST';告诉LWP在POST请求发送后如果发生重新定向就自动跟随
  2.13 $ua->timeout
  $ua->timeout( $secs )
  设置缓冲时间,默认180s
  3.代理属性
  $ua->proxy(\@schemes, $proxy_url)
  $ua->proxy($scheme, $proxy_url)
  如
  $ua->proxy(['http', 'ftp'], 'http://proxy.sn.no:8001/');
  $ua->proxy('gopher', 'http://proxy.sn.no:8001/');
  指明通过制定的代理服务器,按照指定的协议方法访问。
  $ua->env_proxy从*_proxy 环境变量获取代理设置,如:
   gopher_proxy=http://proxy.my.place/
   wais_proxy=http://proxy.my.place/
   no_proxy="localhost,my.domain"
   export gopher_proxy wais_proxy no_proxy
  4.请求方法
  4.1 $ua->get( $url )
  $ua->get( $url , $field_name => $value, ... )
     :content_file   => $filename     将返回的文件按照$filename保存下来,对大文件应该如此,不然保存在内存中。
     :content_cb     => \&callback    callback执行的函数,这个选项与:content_file只能设置其一。
     :read_size_hint => $bytes
  如:$response=$ua->get('http://search.cpan.org/',':content_file'=>'/tmp/sco.html')
  4.2 $ua->head( $url )
  $ua->head( $url , $field_name => $value, ... )
  4.3 $ua->post( $url, \%form )
  $ua->post( $url, \@form )
  $ua->post( $url, \%form, $field_name => $value, ... )
  如:$response = $browser->post( $url,[formkey1 => value1,formkey2 => value2,...],headerkey1 => value1,headerkey2 => value2, );
  可以用来提交搜索等等,总之就是构造网址。
  4.4 $ua->mirror( $url, $filename ) 获取$url指定的文件,并按照$filename保存下来。
  4.5 $ua->request( $request )
  $ua->request( $request, $content_file )
  $ua->request( $request, $content_cb )
  $ua->request( $request, $content_cb, $read_size_hint )
  4.6 $ua->simple_request( $request )
  $ua->simple_request( $request, $content_file )
  $ua->simple_request( $request, $content_cb )
  $ua->simple_request( $request, $content_cb, $read_size_hint )
  4.7 $ua->is_protocol_supported( $scheme )
  转载于:http://blog.sina.com.cn/s/blog_4df3f98901010tkj.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-559265-1-1.html 上篇帖子: Perl 脚本实现MySQL 异机导入导出 下篇帖子: Centos linux 上安装Perl DBD::mysql驱动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表