`
kankan1218
  • 浏览: 276704 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

用LWP简单编写WEB访问的应用 ----需要登陆的网站,保留服务器返回的cookie

    博客分类:
  • perl
阅读更多
LWP 是 Library for WWW access in Perl 的缩写,用途说得很清楚,就是一个访问Web服务器的Perl包。
利用LWP这个包,我们可以很方便的在我们的perl脚本里面访问外部的Web服务器上面的资源。

为什么要用LWP?
现在的网站应用越做越复杂,要想简单的写一个Socket telnet 去用 GET 指令获取资源简直是不可能的,特别是一些需要用口令登陆的网站。
如果你只想简单获取一些资源而不想写太多比较复杂的代码的话,那么就应该选用一个合适的封装起来的HTTPD模块。

我们知道,HTTPD协议是一个面向对象的协议,通常我们把有关的过程抽象为Request,Response,perl本身也支持面向对象编 程,所以Perl的HTTPD包里面也提供了Request,Response对象,同时,把Headers、Cookies,在使用LWP的时候,这些 对象都是必须要引用到的。

下面,我介绍一下关键几个步骤:

1、生成 LWP::UserAgent 的实例:
$ua = LWP::UserAgent->new;

LWP::UserAgent支持代理服务器,这个时候,可以调用 proxy 方法设置一下代理服务器,这样你用LWP发出的信息讲经过你指定的代理服务器转发出去;

$ua->proxy(['http'], $proxy);

2、生成Headers和$cookie_jar对象的实例,并初始化Headers的实例:

$cookie_jar = HTTP::Cookies->new;

$header = new HTTP::Headers
Accept_Language=>'zh-cn',
Content_Type=>"application/x-www-form-urlencoded",
Accept_Encoding=>"gzip, deflate",
Accept=>"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*";

上面我说过,目前很多网站是不能简单的通过一条 GET 指令获取资源的,例如一些 WEB 服务器会检查浏览器发送的信息头,如果没有这些信息头,WEB是不会返回请求的资源的。因此,我们需要认真填写好这些 Headers ,免得服务器拒绝发出的请求的资源。


3、生成request对象的实例,并初始化:

$loginurl="http://reg4.163.com/in.jsp?url=http://sd.gz.163.com/pclubdir/enter.html";
$loginconten="username=szxyz&password=123456&SelectService=0";

$request = HTTP::Request->new(POST=>$loginurl,$header,$loginconten);

第一个参数POST=>$loginurl,由于这个请求对象用POST方法提交信息的,头一个参数,应为:POST=>$loginurl,$loginurl 是提交的URL;
第二参数$header,就是刚才生成的 Headers 的实例;
第三个参数$loginconten,是POST方法提交的信息;

大家细细一看就会发现,其实,这就是一个网易广州社区的登陆动作,下面我将继续就登陆社区为例子介绍怎么使用LWP;

如果我们需要生成一个GET方法的请求对象,这更加简单,只需要把上面的代码改一下就可以,例如我们需要生成一个取网易的首页请求,我们可以这样写:

$url="http://www.yahoo.com"
$request = HTTP::Request->new(GET=>$url,$header);

4、发送请求,并返回一个Response对象的实例,并从Response对象的实例中获取Web服务器的送过来的cookie,将其存放在刚才生成的cookie对象的实例中:
$response = $ua->request($request);
$cookie_jar->extract_cookies($response);

当请求成发送之后,服务器如无意外,就会正确的返回你所请求的信息,而正文的信息保存在 $response->content 当中; 我们可以用打印语句,打印出来看看:
print $response->content;

当我们用口令成功登陆一个网站的时候,该网站的服务器通常会返回一组cookie给浏览器,其后的一段时间中,浏览器每次向网站发送请求的时候,只需将这个cookies发送给服务器,就能通过身份验证,例如网易社区就是如此。

对于这类需要登陆的网站,我们必须保留服务器返回的cookie,并在下次向该服务器发送请求时,把这个cookie也发送出去。由于我们发送的 请求都是封装Request对象的实例中的信息,所以我们只需把cookie对象的实例导入Request对象的实例中即可,然后发送到信息中就含有了该 cookies的信息;
具体的代码就是:

$cookie_jar->add_cookie_header($request);

下面我们用LWP包写一个访问页面为例子的小程序结束这篇文章:

-------------------------------------

#!/usr/bin/perl

require HTTP::Request;
require HTTP::Response;
require HTTP::Headers;
require HTTP::Cookies;
require LWP;

&init();
&main;

sub init {

    $ua         = LWP::UserAgent->new;
    $cookie_jar = HTTP::Cookies->new;

    $header = new HTTP::Headers
      Accept_Language => 'zh-cn',
      Content_Type    => "application/x-www-form-urlencoded",
      Accept_Encoding => "gzip, deflate",
      Accept =>
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*";

}

sub get {

    my $url;

    ($purl) = @_;

    $request = HTTP::Request->new( GET => $purl, $header );
    $cookie_jar->add_cookie_header($request);
    $response = $ua->request($request);
    $cookie_jar->extract_cookies($response);

}

sub main {

    $myurl = "http://cn.yahoo.com/";

    &get($myurl);
    print $response->content;

}

-------------------------------------

实际上,只要细心的阅读Perl附带文档,了解各对象的调用关系,LWP是很简单易学上手的,而且功能比较齐全,用途也比较广泛,例如我们写一些新闻抓取工具,蜘蛛程序,搜索引擎登陆程序,利用LWP再加上Perl的超强的文本出来功能,这将显得十分方便快捷。
分享到:
评论

相关推荐

    perl-LWP-Protocol-https-6.04-4.el7.noarch.rpm

    离线安装包,亲测可用

    可用于血压计的LWP040压力传感器规格书

    【LWP040压力传感器】是专为血压计等应用设计的一款全硅结构的MEMS(Micro-Electro-Mechanical Systems)压力传感器。它能在广泛的外部环境温度范围内(-20℃~85℃)工作,提供精确的压力测量,量程为0~40kPa,并...

    LWP-UserAgent-ProxyAny-1.02.tar.gz

    在Perl编程中,LWP::UserAgent是一个核心模块,它提供了与Web服务器交互的基本功能,如发送GET和POST请求、处理响应等。而"LWP::UserAgent::ProxyAny"扩展了这个模块,添加了对通过任意类型的代理服务器(如HTTP、...

    perl-LWP-MediaTypes-6.02-2.el7.noarch.rpm

    离线安装包,亲测可用

    WEB安全测试

    6.5 使用LWP对网站做镜像 121 6.6 使用wget对网站做镜像 123 6.7 使用wget对特定的清单做镜像 124 6.8 使用Nikto扫描网站 125 6.9 理解Nikto的输出结果 127 6.10 使用Nikto扫描HTTPS站点 128 6.11 使用带身份验证的...

    LWP-Simple-REST:LWP-Simple-REST 的只读发布历史

    LWP-Simple-REST 模块是 Web 应用程序的请求者。 当您需要将请求发送到脚本中时,这很容易,因为您不需要创建 UserAgent 并创建请求者来向服务器发出请求。 先决条件 为了安装和使用这个包,你需要 Perl 5.14.4 或...

    Perl and LWP 高清版

    本章为读者介绍了Web自动化的基本概念,阐述了为什么使用Perl和LWP来完成Web自动化任务,以及如何开始编写一个简单的网络爬虫脚本。 第二章:Web基础。本章讲述了Web工作的基础知识,包括Web服务器、HTTP协议以及...

    rh-perl530-perl-LWP-MediaTypes-6.04-5.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    Python库 | lwp-0.2-pre3.tar.gz

    Python中有很多著名的爬虫库,如BeautifulSoup和Scrapy,lwp可能是为初学者或简单项目设计的替代选择。 2. **HTTP请求与响应**:一个典型的网络爬虫库会包含处理HTTP请求和响应的功能,如发送GET和POST请求,接收...

    perl and lwp

    LWP 是一个Perl模块集合,允许开发人员编写能够与Web服务器交互的程序,包括发送HTTP请求并处理响应。以下是对Perl和LWP网络爬虫的深入解释: 首先,Perl是一种功能强大的脚本语言,广泛应用于文本处理、系统管理...

    LWP-Protocol-Net-Curl:让我们再次使LWP变得更好!

    这样,当你使用LWP的`get`, `post`等方法时,实际上是在利用libcurl的强大功能。这对于处理大量并发请求、处理复杂的认证场景或者与不常见服务器交互的情况尤其有用。 使用LWP-Protocol-Net-Curl可以带来以下优势:...

    basic-emac-uip-webserver-project-at91sam9260-ek-keil.

    在嵌入式系统领域,实现一个简单的Web服务器能够为设备提供远程监控和管理的功能,大大提升了系统的可操作性和便利性。"basic-emac-uip-webserver-project-at91sam9260-ek-keil"就是这样一个项目,它利用了Microchip...

    rh-perl530-perl-LWP-Protocol-https-6.07-12.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    PyPI 官网下载 | lwp-0.2-pre4.tar.gz

    发布Python库到PyPI需要遵循一定的步骤,包括编写`setup.py`脚本来定义项目信息、打包源代码、创建元数据以及使用`twine`工具上传到PyPI。开发者通常会使用`wheel`格式发布库,因为它比源代码包更高效,因为Python...

    WebAccess实战应用二 :OCX 控件在WebAccess 中的应用.rar

    WebAccess是一款广泛应用于工业自动化领域的监控系统,它允许用户通过网页远程访问和控制PLC(可编程逻辑控制器)以及其他设备。本实战应用主要探讨的是如何在WebAccess中集成和使用OCX(ActiveX控件)来扩展其功能...

    用PERL LWP模块实现的一个在线字典脚本

    标题中的“用PERL LWP模块实现的一个在线字典脚本”表明了我们要讨论的核心是使用Perl编程语言的LWP(Library for WWW in Perl)模块来编写一个能够在线查询字典的程序。LWP模块是Perl中用于处理HTTP协议、进行网页...

    ACE+TAO-6.5.0.tar.gz

    linux下OpenDDS环境搭建,所需的软件包,ACE+TAO-6.5.0.tar.gz。 解压,创建环境变量,创建文件等等操作可百度,这里不再赘述,外网下载慢,这里提供快速的下载包,本人编译可通过。

    perl LWP 模块详解

    LWP ("Library for WWW in Perl" 的缩写) 是一个由多个模块组成,用来获取网络数据的的模块组。...要对 LWP 做全面的介绍需要一整本书,很幸运,Perl & LWP 已经出版。而这篇文章向你介绍了最常见的 LWP 用法。

    lwp 阅读器 lotus word pro 阅读器

    Lotus Word Pro是IBM Lotus软件套件的一部分,它是一个强大的文字处理应用程序,曾经广泛应用于企业和办公室环境中。 【描述】"lwp阅读器 lotus word pro viewer IBM lotus 123" 暗示了这个阅读器不仅能够处理Lotus...

    libhttp-cookies-perl_6.00.orig.tar_libhttp_

    《Perl编程中的...通过理解并熟练运用这个库,开发者可以更好地构建和维护Web应用程序,提供更加顺畅的用户体验。在实际开发中,结合其他HTTP相关的Perl模块,如LWP系列,可以构建出功能完备的网络客户端应用。

Global site tag (gtag.js) - Google Analytics