- 浏览: 271824 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
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 17591 测试内容和常用模块 ... -
Xpath基本用法
2011-01-04 17:13 1526my $liStr = $tree->findnode ... -
perl ssh scp 操作远程机器进行验证
2010-12-24 18:13 1789#!/usr/bin/perl use strict; ... -
保存cookie到本地,发送请求时带着cookie。
2010-12-10 17:44 1703use Data::Dumper; use LWP:: ... -
How to deal with 'https'
2010-12-08 15:00 923Windows http://johnbokma.com/pe ... -
更具if modified since更新图片,并且删除陈旧的图片
2010-12-03 10:13 1051更具if modified since更新图片,并且删除陈旧的 ... -
Mechanize 模块 可以提交form,实现登录功能
2010-10-26 10:36 1410Mechanize 模块 可以提交form,实现登录功能 : ... -
perl模块推介
2010-10-26 10:07 3036模块推介 取自 PerlChina.org - wiki ... -
WWW::Mechanize使用手册
2010-10-26 09:57 1877Mechanize使用手册(翻译 ... -
perl高级排序
2010-10-08 14:55 6497高级排序 ... -
【精】LWP与WEB的基本使用
2010-09-25 16:44 1912LWP 与 WEB 的基本使用: http://wiki. ... -
优化 Perl , 榨取代码的最大性能
2010-09-25 11:11 1363转载自:http://www.ibm.com/develope ... -
perl 模拟post提交
2010-08-26 18:05 1538对于post分页的网站,用正常的在url后面加参数的方法已经不 ... -
Perl 的 utf8 与编码处理
2010-08-19 12:48 2844本文基于笔者查阅的 perldoc 和试验结果。鉴于经常有人 ... -
Perl Unicode全攻略
2010-08-19 12:47 1183耐心看完本文,相信你今后在unicode处理上不会再有什么问题 ... -
perl 读写文件
2010-08-15 23:52 5847用Open() 函数打开文件 打开文件的常用方法是: op ... -
perl数据结构
2010-08-15 23:12 9231,{}:hash的引用, $product = {'Reta ... -
perl开发环境可以单步调试:eclispe+epic+PadWalker模块
2010-08-15 19:24 2083eclispe+epic+PadWalker模块: 1。假设已 ... -
perl特殊符号
2010-08-13 13:59 11181.$!记录打开文件句柄时的出错信息 2.$@记录eval捕获 ... -
perl的pop跟push操作数组的最右边,shift跟unshift操作数组的最左边
2010-08-13 10:25 3271perl的pop跟push操作数组的最右边,shift跟uns ...
相关推荐
离线安装包,亲测可用
离线安装包,亲测可用
LWP-UserAgent-ProxyAny-1.02.tar.gz LWP-UserAgent-ProxyAny-1.02.tar.gz
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 使用带身份验证的...
LWP040 系列压力传感器是一款全硅结构 MEMS 压力传感器,外部环境温度-20℃~85℃,可以实现压力 0~40kPa 的精确测量,并与输出电压呈现较好的线性关系。该系列压力传感器采用开环检测,SOP6,DIP6 封装,拓宽产品...
LWP-Simple-REST 模块是 Web 应用程序的请求者。 当您需要将请求发送到脚本中时,这很容易,因为您不需要创建 UserAgent 并创建请求者来向服务器发出请求。 先决条件 为了安装和使用这个包,你需要 Perl 5.14.4 或...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
python库。 资源全名:lwp-0.2-pre3.tar.gz
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
LWP ("Library for WWW in Perl" 的缩写) 是一个由多个模块组成,用来获取网络数据的的模块组。...要对 LWP 做全面的介绍需要一整本书,很幸运,Perl & LWP 已经出版。而这篇文章向你介绍了最常见的 LWP 用法。
linux下OpenDDS环境搭建,所需的软件包,ACE+TAO-6.5.0.tar.gz。 解压,创建环境变量,创建文件等等操作可百度,这里不再赘述,外网下载慢,这里提供快速的下载包,本人编译可通过。
basic-emac-uip-webserver-project-at91sam9260-ek-keil在keil环境下使用UIP进行webserver的源码
资源来自pypi官网。 资源全名:lwp-0.2-pre4.tar.gz
LWP-Protocol-Net-Curl:让我们再次使LWP变得更好!
离线安装包,亲测可用
本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本...
lwip ucos -web-在AT91SAM9260上的应用此系统是我编写的,还没完善,但是里面包含很详细的应用实例。由于这是个很大的系统因此再添加的无非就是应用层上的相关信息。 已经调试通过,你可以下载下来连上电脑,记得用...
CPAU 以管理员或受限用户运行程序及其它工具 ...内含CPAU.exe、BAT转EXE、图标提取. 大概用法: CPAU.exe -u administrator -p Password1 -ex “C:\Program Files\...-lwp 如果是本地帐号,必须使用此帐号才能交互式认证
初步学习perl lwp网络爬虫的参考资料,学习笔记,很全
perl完成浏览器完成的工作必须要满足:分析URL、提取HTML、构造HTTP方法、解析HTML