perl学习笔记16--Web自动化和连网

perl学习笔记16--Web自动化和连网
2010年06月13日
  Web自动化和连网
  1. LWP概述
  ?? HTTP:Request请求对象包含了一些用于描述客户对服务器的请求的信息。它所包含的属性有:method(方法)、URL(统一资源定位)、header(标头)和content(内容)。HTTP:Request有4种请求方法:get、put、post和head。URL时所请求的URL地址。标头是一组健/值对,它提供了关于请求的附加信息。内容包含了作为请求的一部分、由客户发给服务器的数据。
  ?? 当服务器收到请求后,他会建立一个用于响应客户的HTTP:Response对象。HTTP:Response对象有4种属性:响应码(code)、响应消息(message)、标头(headers)和内容(content)。响应码是请求结果的状态指示器。它表明请求成功或者发生了错误。响应消息是与响应码对应的字串信息。标头包含了关于响应的附加信息,提供了用户所使用的、用来决定如何处理响应内容的描述。内容是有关响应的一些数据。
  ?? 通过一个称为用户代理(User Agent)的对象来完成把请求对象转变成响应对象的。在Perl中,该用户代理是类LWP:UserAgent的一个实例。在一般的Web交互中,他的作用相当于一个浏览器,他处理来自请求的信息,并创建相应的响应对象。响应对象定义了要返回给用户代理(一般是一个Web浏览器)的响应信息。用户代理主要属性有:延时(timeout)、代理名城(agent)、用户邮件地址(from)和认证书(credentials)。延时定义了用户代理在超时发生前的最长等待时间。代理名称定义了所使用的用户代理的名字。当用户代理与网络进行会话时,就会用到这个名字。用户邮件地址也就是正在使用web浏览器的用户的邮件地址。认证书包含了一次成功响应所需要的用户名或密码。
  2. LWP命令
  ?? 用户代理的request方法用于请求定义的文档。该方法调用的结果储存在一个HTTP::Response对象中。
  my $agent = new LWP::UserAgent();
  my $request = new HTTP::Request ( 'GET' = $url );
  my $response = $agent -> request ( $request );
  ?? HTTP::Response对象的is_success方法用来判别请求是否成功。如果请求成功,就调用HTTP::Response对象的content方法,输出响应。如果请求不成功,就调用HTTP::Response对象的status_line方法,输出错误信息。这个方法将从对象中返回状态代码和响应消息。
  if ( $response -> is_success () ) {
  print ( OUT $response -> content () );
  }
  Else {
  print ( OUT "Error:" . $response -> status_line() . " \n");
  }
  ?? 在HTTP::Request对象中的POST请求方法类似于HTML单元素中post方法。
  $request = new HTTP::Request ( 'POST', $url );
  ?? HTTP:Request对象中的content_type方法用于设置请求的内容类型(content type)。这决定了HTTP协议如何处理这个请求。
  $request -> content_type ( ' application/x-www-form-urlencoded ' );
  ?? HTTP::Request对象的content方法定义了要传送给CGI程序的数据。Content应该是一个将要发送给post请求的字串。
  ?? HTTP::Request对象的as_string方法将以文本输出所返回的响应,包含了content方法所无法输出的一些附加信息。下例中将响应输出到文件句柄OUT所指向的文件中。
  Print ( OUT $response -> as_string () );
  ?? head请求只返回请求的标头(headers)信息。标头包括对象类型、大小和存活时间这样的信息。当需要知道文档是否存在时,这是非常有用的。
  3. LWP::Simple模块
  ?? 简单的LWP功能可以从LWP::Simple模块中获取,它提供了对LWP的过程调用接口,而不是以前的面向对象的方法。
  ?? LWP::Simple模块的getprint函数,他用来检索一个web网页并将其输出到一个文件句柄STDOUT(标准输出)。函数getprint返回了HTTP响应代码。
  my $status = getprint ( $url );
  ?? LWP::Simple模块中的get函数检索到一个web网页,并将它的内容(content)储存在一个标量中。
  my $page = get ( $url );
  ?? LWP::Simple模块中的getstore方法用来检索一个Web页面并将它储存在一个文件中。同样,getstore函数也返回HTTP响应代码。
  $status = getstore ( $url, "page.txt");
  4. HTML解析
  ?? HTML::TokeParser模块和LWP对于从web站点提取文本是非常有用的。
  ?? TokeParser构造函数的参数接收一个字串、一个字串引用或一个文件句柄。如果他接收一个字串,Perl会把它当成一个文件名来打开,从中读取数据。如果他接收一个字串引用,perl会把它当成一个数据引用来解析。如果他接收一个文件句柄,TokeParser对象将尝试从该文件句柄所指向的文件中读取数据。
  ?? TokeParser对象的get_token方法从解析文档中返回一个标志(token)。
  ?? 标志是数组引用,他的5种可能的类型是:开始标志(start token)、结束标志(end token)、文本标志(text token)、注释标志(comment token)和声明标志(declaration token)。
  ?? 一个开始标志(token)就是一个HTML开始标记(tag)。在一个开始标志的数组中,第一个元素是"S",下一个元素保存着标记名,接下来是一组标记变量,在下一个是包含每个标记属性的散列,最后一个元素是原文。
  ?? 一个结束标志的数组包含3个元素:"E"、标记名和原文(Original Text)。
  ?? 文本标志、注释标志和声明标志数组包含两个元素:一个代表类型的字符和标志中的文本。文本标志、注释标志和声明标志的类型分别是"T"、"C"、"D"。
  5. 高级联网入门
  所有的网络通讯是通过套接字(Socket)来完成的。套接字是通讯的端点。一个可以通讯的连接包括两个套接字。数据可以通过数据流和数据报的形式来传递。数据流提供了一种双向的、可靠的、有序的通讯传输方式。数据报的连接是比较不可靠的,在数据报的连接中,信息是通过一个小小的数据包传输的。数据报不如数据流可靠,但数据报需要较少的资源,因为它不需要在两台计算机之间建立永久的连接。所有连接需要两个套接字,一个由服务器程序维护,一个由客户端维护。
  6. 传输控制协议TCP
  ?? 通常一个服务器应用安装在一台用于监听连接的计算机上(如等待web浏览器连接的web服务器)。客户程序必须知道她所要连接的服务器的地址。
  ?? 为了标准化网络中计算机间的会话,制定了许多协议。通常,一个邮件应用与两个不同的服务器进行通讯。它通过与POP服务器会话来接收用户邮件,与SMTP服务器会话来发送用户邮件。
  ?? 主要的面向连接的因特网协议是传输控制协议(TCP)。可以使用IO::Socket模块创建一个客户/服务器的聊天程序。使用这个模块容易的定义服务器的位置。
  my $socket = new IO:Socket::INET (
  PeerAddr => $host,
  PeerPort => $port,
  Proto => 'tcp' ,
  Type => SOCK_STREAM )
  or die ( "Cannot connect to $host:$port:$@ \n");
  ?? 端口号定义了服务器从哪里等待和接收用户的连接。
  ?? 可以使用模块IO::Scoket来创建一个IO::Scoket::INET对象。这是一个执行因特网连接的IO::Scoket对象。
  ?? 传递给构造函数4个参数:聊天服务器的IP地址(PeerAddr);为TCP聊天程序所设置的远程计算机端口(PeerPort);通讯协议(proto)以及用于判别数据流链接或数据报文连接的连接类型(Type)。
  ?? 行缓冲特殊变量 $| 定义了缓冲功能是否应当关闭。当$|定义为1时,表示缓冲功能应当关闭。
  ?? IO::Scoket::Net的参数LocalPort定义了服务器上的监听端口。
  ?? Type参数定义了创建连接的类型。
  ?? Listen参数定义了服务器开始不理新连接客户前,服务器上排队等待连接的用户数。对于服务器,Listen是必须定义的。
  ?? 类IO::Scoket::INET中的accept方法一直等待到有一个客户尝试访问他。一旦一个客户确实访问上服务器。服务器就建立起一个连接。 my $server = new IO::Socket::INET ( LocalPort => $port, Type => SOCK_STREAM, Listen => 10 ) or die ( " Cannot be a server on $port : $@ \n"); local $| = 1; my $client = $server -> accept(); my $response = ; 7. 简单邮件传输协议SMTP
  ?? 如果要发送邮件就需要一个SMTP服务器。Perl提供了一个用于处理STMP传输的模块,它就是Net::SMTP模块。
  ?? 第一个传送给构造函数的参数必须是一个合法的SMTP服务器地址。这个构造函数在一个步骤内创建对象并连接服务器。
  ?? 可以用可选参数来发送用户的邮件域(hello)、连接超时(Timeout)和一个判别调试是否应该关掉的指示器(Debug)。
  ?? 可以使用mail方法来创建一条新的邮件信息,它把用户的邮件地址作为参数。使用NET::SMTP中的to方法来定义邮件的接收者。Data方法开始传送邮件消息数据。一旦传送开始,可以通过datasend来发送信息。为了完成信息的传送,要使用dataend方法。Net::SMTP的quit方法关闭连接。
  my $smpt = new Net::SMPT( "$server",hello => "server" )
  or die ( " Cannot send e-mail : $! ");
  $smtp -> mail( "$my_address");
  $smtp -> to ( "$address");
  $smtp -> data();
  $smtp -> datasend ( "From: $from \n");
  $smtp -> datasend ( " To : $to \n");
  $smtp -> datasend (" Subject: $subject \n \n");
  $smtp -> datasend (" $message \n");
  $smtp -> data();
  $smtp -> quit();
  8. 邮局协议 POP
  ?? 邮局协议POP也是常见的一种协议,它便于从远程服务器上存储和检索邮件。POP服务器允许读取、阅读、存储和删除邮件。
  ?? Mail::POP3Client模块可用来读取邮件
  ?? Mail::POP3Client模块中的Count方法返回邮箱中的消息条数。
  ?? Mail::POP3Client模块中的Head方法返回消息标头,这些消息标头包含了关于邮件中所有的相关信息。
  my $pop = new Mail::POP3Client (
  USER => $user,
  PASSWORD => $password,
  HOST => $server ) ;
  my $message = $pop -> Count();
  9. 查找万维网
  ?? WWW::Search模块提供了一系列查找引擎的接口。这个模块为好几个模块所继承和扩展,使其于各种查找引擎的交互功能成为可能。
  ?? 为了定义一个查询,把用户输入的原始查询作为一个参数传给WWW::Search模块中的escape_query方法。这就把简单的语句转换成适合WWW::Search模块的HTML编码语句。
  ?? Native_query方法接收escape_query方法返回至,开始查询。
  ?? 为了从特定的查找引擎中取得结果,调用WWW::Search对象中的next_result方法。
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/KataDoc360/archive/2008/11/30 /3413802.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值