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

[经验分享] perl and LWP-1

[复制链接]

尚未签到

发表于 2018-9-1 08:01:26 | 显示全部楼层 |阅读模式
  LWP( Library for Web access in Perl)
  能做到什么?
  1. 使用URL对远程Web Server读取文件。
  2. 对Web Serve利用POST 方式送出form request。
  3. 对远程Webserver最近更新的文件作更新动作。
  4. 解析HTML 文件,取得其中的「连结」与一些需要的数据。
  5. 将HTML转成纯文本文件或Postscript档案。
  6. 处理cookies,HTTP redirects, proxy servers, and HTTP user authentication.这些特殊事件。
  重要特性:
  1.包含许多可重复使用的组件,可独立运作或相互配合使用.
  提供一个HTTP-style沟通的Object Oriented模型。支援 http, https, gopher, ftp, news, file, and mailto resources.
  2.提供完整的OO接口。
  3.支持基本的编码与认证功能
  4.支持重新导向处理。
  5.可以透过代理服务器(Proxy server)
  6.可以透过robots.txt建构robots。有点类似网络上的爬虫程序。
  7.实作HTTP的content negotiation algorithm 可以与CGI程序作界接。
  8.支援 HTTP cookies.
  8.有一个简单的指令格式应用程序: lwp-request.
  安装时,要求先要安装的modules:
  URI URL parsing and manipulation
  Net::FTP to support ftp:// URLs
  MIME::Base64 to support HTTP Basic authentication
  Digest::MD5 to support HTTP Digest authentication
  HTML::HeadParser for finding the  tag in HTML headers
  (实际上更多,因为要安装上述module可能还要先安装其它modules)
  #–比较建议这种方式安装,但是如果不能对外连结,只好跟我一样慢慢抓modules,一个一个安装
  用CPAN方法安装:
  #perl -MCPAN -e ‘install Bundle::LWP’
  除了上面的模块外,另外还要安装
  #perl -MCPAN -e ‘install HTML::Parser’ -e ‘install HTML::Formatter’
  如果不用CPAN方式安装:
  HTML-Parser HTML Parser
  HTML-Tree HTML syntax-tree generation
  Font-AFM Postscript font metrics
  HTML-Format HTML Formatting
  一定要要下载并安装上述modules..
  如果要使用HTTPS必须要安装IO ::Socket ::SSL and OpenSSL library(http://www.openssl.org)
  安装完LWP后,会帮你安装四个scripts
  lwp-request 取得url并显示出来
  lwp-download 下载文件到硬盘,适合大档案使用。
  lwp-mirror 与远程的服务器的文件作镜射动作,只更新最近有被改变的文件。
  Lwp-rget 递回的取得整个档案架构
  LWP基础程序:
  #!/usr/bin/perl
  # file get_url.pl
  #–开启语法检查并使用LWP modules
  use strict;
  use LWP;
  #–取得URL
  my $url = shift;
  #–建立LWP ::UserAgent 与HTTP ::Request 物件,
  #–其中Request对象将$url传进去
  my $agent=LWP::UserAgent->new();
  my $request = HTTP::Request->new(GET=>$url);
  #–透过UserAgent的request method将Request送出
  my $response= $agent->request($request);
  #–检查是否有error发生
  $response->is_success or die “$url: “,$response->message,”\n”;
  #–显示responser的内容
  print $response->content;
  其中HTTP ::Request Object可以很简单的只有一个URL也可以很复杂的包含cookies、authentication information与CGI script所需要的arguments。
  HTTP ::Response对象,主要将Server回传的结果打包起来,其包含执行结果状态的信息加上文件内容。
  LWP ::UserAgent 为一个介于Client与Server中间的媒介,负责传送Request至Server,并将Server的回传值解析后存入HTTP ::Response Object中。
  另外也可以使用LWP ::Simple的Modules也可以作相同的事情。
  # !/usr/bin/perl
  # file simple_get.pl
  use LWP ::Simple ;
  my $url = shift;
  #–如果正常会显示内容,否则
  getprint($url);
  LWP中最重要的三个对象:HTTP::Request、HTTP::Response、LWP::UserAgent。
  以下分别针对这三个modules作说明。
  LWP Modules里面Modules间的概观:

  LWP::MemberMixin — Access to member variables of Perl5>
  LWP::UserAgent — WWW user agent>  LWP::RobotUA — When developing a robot applications
  LWP::Protocol — Interface to various protocol schemes
  LWP::Protocol::http — http:// access
  LWP::Protocol::file — file:// access
  LWP::Protocol::ftp — ftp:// access
  …
  LWP::Authen::Basic — Handle 401 and 407 responses
  LWP::Authen::Digest
  HTTP::Headers — MIME/RFC822 style header (used by HTTP::Message)
  HTTP::Message — HTTP style message
  HTTP::Request — HTTP request
  HTTP::Response — HTTP response

  HTTP::Daemon — A HTTP server>  WWW::RobotRules — Parse robots.txt files
  WWW::RobotRules::AnyDBM_File — Persistent RobotRules
  Net::HTTP — Low level HTTP client
  在Web 服务的典型中,所有Client与Server的交互作用分为Client的request与Server的reponse
  HTTP::Request:

  Client的request包含URL与所使用的method。事实上HTTP::Rquset使用的是URI(Uniform Resource>  通讯协议:

  HTTP (http://www.abc:port/path /)、FTP(ftp://ftpname:port/path)、GOPHER(gopher::  //gophername:port/path)、SMTP(mailto:user@mailserver)、NEWS(news:message- >  这个modules支持的方法:
  GET 取得URL的文件(web page)
  PUT 替代或建立URL上的文件(ftp)
  POST 送出事先准备好的Form至Server处。
  DELETE 删除URL上的文件(FTP Server)
  HEAD 取得URL的信息
  HTTP协议包含其它信息:(RFC 822-like 字段)这里只有部分:
  Accept 指出client准备送出的MIME型态
  User-agent Client软件的名称与版本
  Content-type Request的文件型态
  PUT与POST method:Request可以包含文件内容(content data)。
  PUT:包含要上传的到URL的文件内容。
  POST:包含已经填好的要送出至CGI Script的Form。
  LWP使用HTTP::Request表示所有经由LWP所发送出去的的Request,不是只有HTTP也可以包含FTP、NNTP、SMTP等协议。
  Method的说明:
  $request=HTTP::Request->new($method,$url[,$header[,$content]])
  建构HTTP::Request物件。最少要两个自变量($method与$url)。$URL可以是URI对象。Header与content可以对象建立后再补数据。
  $request->header($field1=>$val1,$feild2=>$val2..) 设定$field数值。
  @values=$request->header($field):取得某个field里面的所有数值。可以是list也可以是scalar variable用”,”分隔的Variable。
  $request->push_header($filed=>$value)
  将$field与$value加入在header最后面
  $request->remove_header(@fields)
  删掉特定的fields
  $request->scan(\?)
  对每个HTTP header作迭代每个element都丢入? function中,主要传入field数值与value数值。
  从HTTP::Header modules中继承来的method..
  $request->date():设定时间
  $request->expires():设定过期时间
  $request->last_modified():设定resources最后修改时间
  $request->if_modified_since():检查是否从$date后有被修正过。
  $request->content_type():设定讯息内容的形式
  $request->content_length():设定讯息的长度
  $request  ->referrer():设定Used to specify the address (URI) of the document  from which the requested resouce address was obtained.
  $request->user_agent():Client端的软件与版本
  $request->content([$content])
  设定requset的内容,可以是一个subroutine,LWP会不断invoke这个function直到回传null数值。
  $request->content_ref
  回传ref to content,可以直接修改内容
  $requese->add_content($data)
  增加content内容
  改变URL内容与method:
  $request->uri([$uri])
  设定或取出URI内容
  $request->method([$method])
  设定或取出method内容
  $string=$request->as_string
  将request内容以文字方式显示出来
  一些例子:
  发送Email:
  $req = HTTP::Request->new(POST => ‘mailto:libwww@perl.org’);
  $req->header(Subject => “subscribe”);
  $req->content(”Please subscribe me to the libwww-perl mailing list!\n”);
  FTP档案:
  $req = HTTP::Request->new(GET => ‘file:/etc/passwd’);
  与NEWS Server作用:
  $req = HTTP::Request->new(GET => ‘news:abc1234@a.sn.no’);
  $req = HTTP::Request->new(POST => ‘news:comp.lang.perl.test’);
  $req->header(Subject => ‘This is a test’,
  From => ‘me@some.where.org’);
  $req->content(message
  code()回传状态码,message()回传讯息明码内容,也可以给他参数设定他的数值。
  $text=$response->status_line
  回传与Web Server传回的内容一样的数值,状态码加上讯息内容。
  $boolean=$response->is_success
  是否成功
  $boolean=$response->is_redirect
  是否重新转向
  $boolean=$response->is_info
  是否是information
  $boolean=$response->is_error
  是否有错误
  $html=$response->error_as_HTML
  当is_error为真的时候,利用error_as_HTML产成HTML格式的错误讯系
  $base=$response->base
  回传base的URL。实际上回传URI对象,可用来解析relative的links。
  $request=$response->request
  回传HTTP::Request 物件。如果有redirect或authentication则对象内容会与原本的不一样。
  $request=$reponse->previous
  回传HTTP::Request对象,可以在一连串redirect之后找到原始的HTTP::Request对象内容。


运维网声明 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-560909-1-1.html 上篇帖子: Perl函数 open函数读取文件效率比较 下篇帖子: 使用perl 包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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