- 浏览: 276704 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
fei33423:
其实查看源代码你可以发现 update其实是调用了execut ...
JdbcTemplate 中execute和update的区别: -
CoderDream:
不错,感谢分享!
为绿色版NOTEPAD++添加右键菜单 -
t382159355:
谢谢分享..感激不尽.
java中this用法 -
風一樣的男子:
kankan1218 写道風一樣的男子 写道出乎意料??
菜B ...
结果出乎大部分人的意料 -
feipigzi:
引用java教程中的一段话:我们可以这样理解子类创建的对象:1 ...
结果出乎大部分人的意料
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的超强的文本出来功能,这将显得十分方便快捷。
利用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单元测试
2011-02-15 14:47 18311 测试内容和常用模块 ... -
Xpath基本用法
2011-01-04 17:13 1589my $liStr = $tree->findnode ... -
perl ssh scp 操作远程机器进行验证
2010-12-24 18:13 1826#!/usr/bin/perl use strict; ... -
保存cookie到本地,发送请求时带着cookie。
2010-12-10 17:44 1747use Data::Dumper; use LWP:: ... -
How to deal with 'https'
2010-12-08 15:00 969Windows http://johnbokma.com/pe ... -
更具if modified since更新图片,并且删除陈旧的图片
2010-12-03 10:13 1131更具if modified since更新图片,并且删除陈旧的 ... -
Mechanize 模块 可以提交form,实现登录功能
2010-10-26 10:36 1432Mechanize 模块 可以提交form,实现登录功能 : ... -
perl模块推介
2010-10-26 10:07 3115模块推介 取自 PerlChina.org - wiki ... -
WWW::Mechanize使用手册
2010-10-26 09:57 1926Mechanize使用手册(翻译 ... -
perl高级排序
2010-10-08 14:55 6545高级排序 ... -
【精】LWP与WEB的基本使用
2010-09-25 16:44 1965LWP 与 WEB 的基本使用: http://wiki. ... -
优化 Perl , 榨取代码的最大性能
2010-09-25 11:11 1408转载自:http://www.ibm.com/develope ... -
perl 模拟post提交
2010-08-26 18:05 1578对于post分页的网站,用正常的在url后面加参数的方法已经不 ... -
Perl 的 utf8 与编码处理
2010-08-19 12:48 2930本文基于笔者查阅的 perldoc 和试验结果。鉴于经常有人 ... -
Perl Unicode全攻略
2010-08-19 12:47 1213耐心看完本文,相信你今后在unicode处理上不会再有什么问题 ... -
perl 读写文件
2010-08-15 23:52 5883用Open() 函数打开文件 打开文件的常用方法是: op ... -
perl数据结构
2010-08-15 23:12 9721,{}:hash的引用, $product = {'Reta ... -
perl开发环境可以单步调试:eclispe+epic+PadWalker模块
2010-08-15 19:24 2126eclispe+epic+PadWalker模块: 1。假设已 ... -
perl特殊符号
2010-08-13 13:59 11581.$!记录打开文件句柄时的出错信息 2.$@记录eval捕获 ... -
perl的pop跟push操作数组的最右边,shift跟unshift操作数组的最左边
2010-08-13 10:25 3305perl的pop跟push操作数组的最右边,shift跟uns ...
相关推荐
离线安装包,亲测可用
【LWP040压力传感器】是专为血压计等应用设计的一款全硅结构的MEMS(Micro-Electro-Mechanical Systems)压力传感器。它能在广泛的外部环境温度范围内(-20℃~85℃)工作,提供精确的压力测量,量程为0~40kPa,并...
在Perl编程中,LWP::UserAgent是一个核心模块,它提供了与Web服务器交互的基本功能,如发送GET和POST请求、处理响应等。而"LWP::UserAgent::ProxyAny"扩展了这个模块,添加了对通过任意类型的代理服务器(如HTTP、...
离线安装包,亲测可用
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 模块是 Web 应用程序的请求者。 当您需要将请求发送到脚本中时,这很容易,因为您不需要创建 UserAgent 并创建请求者来向服务器发出请求。 先决条件 为了安装和使用这个包,你需要 Perl 5.14.4 或...
本章为读者介绍了Web自动化的基本概念,阐述了为什么使用Perl和LWP来完成Web自动化任务,以及如何开始编写一个简单的网络爬虫脚本。 第二章:Web基础。本章讲述了Web工作的基础知识,包括Web服务器、HTTP协议以及...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Python中有很多著名的爬虫库,如BeautifulSoup和Scrapy,lwp可能是为初学者或简单项目设计的替代选择。 2. **HTTP请求与响应**:一个典型的网络爬虫库会包含处理HTTP请求和响应的功能,如发送GET和POST请求,接收...
LWP 是一个Perl模块集合,允许开发人员编写能够与Web服务器交互的程序,包括发送HTTP请求并处理响应。以下是对Perl和LWP网络爬虫的深入解释: 首先,Perl是一种功能强大的脚本语言,广泛应用于文本处理、系统管理...
这样,当你使用LWP的`get`, `post`等方法时,实际上是在利用libcurl的强大功能。这对于处理大量并发请求、处理复杂的认证场景或者与不常见服务器交互的情况尤其有用。 使用LWP-Protocol-Net-Curl可以带来以下优势:...
在嵌入式系统领域,实现一个简单的Web服务器能够为设备提供远程监控和管理的功能,大大提升了系统的可操作性和便利性。"basic-emac-uip-webserver-project-at91sam9260-ek-keil"就是这样一个项目,它利用了Microchip...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
发布Python库到PyPI需要遵循一定的步骤,包括编写`setup.py`脚本来定义项目信息、打包源代码、创建元数据以及使用`twine`工具上传到PyPI。开发者通常会使用`wheel`格式发布库,因为它比源代码包更高效,因为Python...
WebAccess是一款广泛应用于工业自动化领域的监控系统,它允许用户通过网页远程访问和控制PLC(可编程逻辑控制器)以及其他设备。本实战应用主要探讨的是如何在WebAccess中集成和使用OCX(ActiveX控件)来扩展其功能...
标题中的“用PERL LWP模块实现的一个在线字典脚本”表明了我们要讨论的核心是使用Perl编程语言的LWP(Library for WWW in Perl)模块来编写一个能够在线查询字典的程序。LWP模块是Perl中用于处理HTTP协议、进行网页...
linux下OpenDDS环境搭建,所需的软件包,ACE+TAO-6.5.0.tar.gz。 解压,创建环境变量,创建文件等等操作可百度,这里不再赘述,外网下载慢,这里提供快速的下载包,本人编译可通过。
LWP ("Library for WWW in Perl" 的缩写) 是一个由多个模块组成,用来获取网络数据的的模块组。...要对 LWP 做全面的介绍需要一整本书,很幸运,Perl & LWP 已经出版。而这篇文章向你介绍了最常见的 LWP 用法。
Lotus Word Pro是IBM Lotus软件套件的一部分,它是一个强大的文字处理应用程序,曾经广泛应用于企业和办公室环境中。 【描述】"lwp阅读器 lotus word pro viewer IBM lotus 123" 暗示了这个阅读器不仅能够处理Lotus...
《Perl编程中的...通过理解并熟练运用这个库,开发者可以更好地构建和维护Web应用程序,提供更加顺畅的用户体验。在实际开发中,结合其他HTTP相关的Perl模块,如LWP系列,可以构建出功能完备的网络客户端应用。