当前位置: 代码迷 >> Web前端 >> perl学习笔记16-Web自动化跟连网
  详细解决方案

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

热度:237   发布时间:2013-11-08 17:52:14.0
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