- 浏览: 278646 次
- 性别:
- 来自: 大连
-
文章分类
最新评论
-
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 18591 测试内容和常用模块 ... -
Xpath基本用法
2011-01-04 17:13 1620my $liStr = $tree->findnode ... -
perl ssh scp 操作远程机器进行验证
2010-12-24 18:13 1837#!/usr/bin/perl use strict; ... -
保存cookie到本地,发送请求时带着cookie。
2010-12-10 17:44 1754use Data::Dumper; use LWP:: ... -
How to deal with 'https'
2010-12-08 15:00 986Windows http://johnbokma.com/pe ... -
更具if modified since更新图片,并且删除陈旧的图片
2010-12-03 10:13 1171更具if modified since更新图片,并且删除陈旧的 ... -
Mechanize 模块 可以提交form,实现登录功能
2010-10-26 10:36 1438Mechanize 模块 可以提交form,实现登录功能 : ... -
perl模块推介
2010-10-26 10:07 3159模块推介 取自 PerlChina.org - wiki ... -
WWW::Mechanize使用手册
2010-10-26 09:57 1945Mechanize使用手册(翻译 ... -
perl高级排序
2010-10-08 14:55 6561高级排序 ... -
【精】LWP与WEB的基本使用
2010-09-25 16:44 2007LWP 与 WEB 的基本使用: http://wiki. ... -
优化 Perl , 榨取代码的最大性能
2010-09-25 11:11 1450转载自:http://www.ibm.com/develope ... -
perl 模拟post提交
2010-08-26 18:05 1595对于post分页的网站,用正常的在url后面加参数的方法已经不 ... -
Perl 的 utf8 与编码处理
2010-08-19 12:48 2977本文基于笔者查阅的 perldoc 和试验结果。鉴于经常有人 ... -
Perl Unicode全攻略
2010-08-19 12:47 1246耐心看完本文,相信你今后在unicode处理上不会再有什么问题 ... -
perl 读写文件
2010-08-15 23:52 5911用Open() 函数打开文件 打开文件的常用方法是: op ... -
perl数据结构
2010-08-15 23:12 9931,{}:hash的引用, $product = {'Reta ... -
perl开发环境可以单步调试:eclispe+epic+PadWalker模块
2010-08-15 19:24 2136eclispe+epic+PadWalker模块: 1。假设已 ... -
perl特殊符号
2010-08-13 13:59 11971.$!记录打开文件句柄时的出错信息 2.$@记录eval捕获 ... -
perl的pop跟push操作数组的最右边,shift跟unshift操作数组的最左边
2010-08-13 10:25 3321perl的pop跟push操作数组的最右边,shift跟uns ...
相关推荐
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 使用带身份验证的...
本章为读者介绍了Web自动化的基本概念,阐述了为什么使用Perl和LWP来完成Web自动化任务,以及如何开始编写一个简单的网络爬虫脚本。 第二章:Web基础。本章讲述了Web工作的基础知识,包括Web服务器、HTTP协议以及...
本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本...
- **CGI(Common Gateway Interface)**:Perl可以编写CGI脚本来处理来自Web服务器的请求,生成动态网页内容。 - **HTTP::Server**:提供基于Perl的HTTP服务器框架,方便搭建自己的Web服务器。 5. **网络数据传输...
- **Hack 9**:Simply Fetching with LWP::Simple(使用LWP::Simple进行简单获取)。展示如何利用LWP::Simple模块快速获取网页内容。 - **Hack 10**:More Involved Requests with LWP::UserAgent(使用LWP::...
HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超...通过使用这些工具,我们可以发现潜在的问题,如延迟、错误状态码、不正确的头部信息等,从而提高Web应用的性能和用户体验。
Flask是一个用Python编写的微型Web应用框架。它的核心特性是简单易用,同时也提供了强大的扩展能力。Flask非常适合用于构建小型到中型的Web应用程序,以及API服务。 #### POST接口与GET接口的区别 在HTTP协议中,...