Perl的WWW:Curl与LWP模块

Perl访问远程网络的方法有很多种(当然,我鄙视system函数调用,非到万不得已,绝对不用),经常会提到的是以下两个模块。

 

这是WWW::Curl模块

#use WWW::Curl::Easy;

my $curl = new WWW::Curl::Easy;

$curl->setopt(CURLOPT_URL, ”http://$host_alias:8082/tail/home/log/dod.log?task_id=101″);

open (my $fileb,”>”,”/tmp/check/$host_alias.TC_temp”);

$curl->setopt(CURLOPT_WRITEDATA,$fileb);

$curl->perform;

 

LWP模块:

#/usr/bin/perl -w

use strict;

use LWP::UserAgent;

 

 

my $url = shift;

my $agent=LWP::UserAgent->new();

my $request = HTTP::Request->new(GET=>$url);

my $response=$agent->request($request);

my $returns=$response->content;

 

print $returns;

 

看起来还是LWP模块好一些,而且WWW:Curl模块在REDHAT9下编译安装一直有问题~

LWP模块所需的依赖:

 

Compress::Raw::Zlib

IO::Compress::Deflate

IO::Compress::Gzip

IO::Uncompress::Gunzip

IO::Uncompress::Inflate

IO::Uncompress::RawInflate

 

关于LWP::UserAgent模块

这个模块可以用get、head、post方法模块发出http请求,并获得相应该的响应,它也可以发送ftp请求,响应的内容保存在内存中。

 

$ua = LWP::UserAgent->new( %options ) //创建一个LWP::UserAgent对象并返回,%options哈希可以设置对象的key/value选项:

KEY                    默认值

———–             ——————–

agent                   ”libwww-perl/#.###”

from                    undef

conn_cache              undef

cookie_jar              undef

default_headers         HTTP::Headers->new

local_address           undef

max_size                undef

max_redirect            7

parse_head              1

protocols_allowed       undef

protocols_forbidden     undef

requests_redirectable   ['GET', 'HEAD']

timeout                 180

另外:如果env_proxy设为真,则代理设置从环境变量中读取;如果keep_alive为真,则会建立LWP::ConnCache。

$ua->clone  复制一个LWP::UserAgent对象。

 

$ua->agent

手动设置请求中的User-Agent字段

$ua->_agent:默认的User-Agent,形如libwww-perl/#.###” #.###为libwww-perl的版本号

$ua->agent(‘MSIE/10′):手动设置useragent为MSIE/10

 

$ua->from

设置请求的from头字段,这个字段默认是空的,一般是请求发起者的邮箱

 

$ua->conn_cache($cache_obj)

事关一个新的模块,LWP::ConnCache

 

$ua->credentials( $netloc, $realm )

$ua->credentials( $netloc, $realm, $uname, $pass )

$ua->credentials(“www.example.com:80″, ”Some Realm”, ”foo”, ”secret”)

用于发送用户名和密码等

 

$ua->proxy(@schemes, $proxy_url)

$ua->proxy($scheme, $proxy_url)

$ua->proxy(['http', 'ftp'], ’http://proxy.sn.no:8001/’);

设置http和ftp走代理通道

 

$ua->no_proxy( $domain, … )

设置某域名访问不走代理通道

 

======================

use strict;

use LWP::UserAgent;

 

my $url   = ”http://www.baidu.com/s?wd=”;

my $agent = LWP::UserAgent->new();

my $filename = ”d:d.txt”;

my $filename2 = ”d:out_d.txt”;

open( E, ”<”, $filename ) or die ”not input file!”;

open( F, ”>”, $filename2 ) or die ”not out file!”;

while ( my $line = <E> ) {

chomp $line;

#my @entry = split($line,” “);

#print $entry[0];

my $_url =$url.$line;

print F $line;

print $line;

my $request  = HTTP::Request->new( GET => $_url );

my $response = $agent->request($request);

my $resp     = $response->content;

chomp $resp;

if ( $resp =~ /cont_txt/ ) {

print F ” match
“;

print ” match
“;

}

else {

print F ” not match
“;

print ” not match
“;

}

#sleep 1;

#print $resp;

#print ”#” x 80,”
“;

}

close E;

close F;

 

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>