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

dex*_*ter 10 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;
}
Run Code Online (Sandbox Code Playgroud)

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

我们发送HTTP :: Request时如何设置cookie

我期待的是:

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

这可能吗??

Gav*_*ock 20

如上所述,cookie在HTTP :: Cookies中:

  • 你需要创建一个cookie罐

  • 您可以设置要放入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
Run Code Online (Sandbox Code Playgroud)

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 / ');