如何使用Perl通过cookie发送和HTTP请求?

时间:2010-03-19 06:22:20

标签: perl

我是Perl的新手,我想编写一个Perl程序:

  • 创建HTTP请求
  • 将其发送到任何网址(例如http://www.google.com
  • 在请求中包含Cookie
  • 将http响应代码记录在文件

我试过这个:

    #!/usr/bin/perl
require HTTP::Request;
require LWP::UserAgent;

$request = HTTP::Request->new(GET => 'http://www.google.com/');
$ua = LWP::UserAgent->new;
$ua->cookie_jar({file => "testcookies.txt",autosave =>1});

$response = $ua->request($request);
if($response->is_success){
print "sucess\n";
print $response->code;
}
else {
print "fail\n";
die $response->code;
}

请告诉我们如何在'request'中设置cookie,即

在发送HTTP :: Request

时如何设置cookie

我期待的是:

$request = HTTP::Request->new(GET => 'http://www.google.com/');
$ua = LWP::UserAgent->new;
$ua->new CGI::Cookie(-name=>"myCookie",-value=>"fghij");

这可能吗?

2 个答案:

答案 0 :(得分:20)

如上所述,Cookie位于HTTP :: Cookies中:

  • 您需要创建一个cookie jar

  • 您可以设置要放入jar中的Cookie值

  • 然后将该jar与您的用户代理关联

例如:

my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new();
$cookies->set_cookie(0,'cookiename', 'value','/','google.com',80,0,0,86400,0);
$ua->cookie_jar($cookies);
# Now make your request

set_cookie有相当多的参数:

  

set_cookie($ version,$ key,$ val,$ path,$ domain,$ port,          $ path_spec,$ secure,$ maxage,$ discard,\%rest)

这是因为cookie jar是从浏览器(UserAgent)的角度设计的,而不是单个请求。这意味着在这种情况下并非所有参数都如此重要。

你需要做的就是$ key,$ val,$ path,$ domain,$ port。

关于:

  

500无法连接到www.google.com:80   (错误的主机名'www.google.com')

这意味着LWP无法查找Google的地址。你是一个Web代理的背后?如果是这样,您将需要使用以下内容在UA中设置代理:

$ ua-> proxy(['http','https'],'http://proxyhost.my.domain.com:8080/');

答案 1 :(得分:3)