Perl HTTP::Cookie 添加多个cookie
Perl HTTP::Cookie add multiple cookies
我编写了一个 Perl 脚本来向网站发送 HTTP GET 请求。在请求 header 中,我想设置多个 cookie,这样 header 看起来像
Cookie: key1 = val1; key2 = val2; key3 = val3
我正在使用 HTTP::Cookies
to set the cookies in a WWW::Mechanize
object.
但是set_cookie()
只能在曲奇罐中添加一个曲奇。如何添加多个 cookie?
如果我多次调用 set_cookie()
方法,只有 cookie_jar 中设置的最后一个 cookie 会在 HTTP GET 请求中发送。
下面是我写的代码
#! /usr/bin/perl
use warnings;
use WWW::Mechanize;
use HTTP::Cookies;
$cookies = HTTP::Cookies->new();
$cookies->set_cookie(0, 'key1', 'val1', '/', 'domain', 80, 0, 0, 86400, 0);
$cookies->set_cookie(0, 'key2', 'val2', '/', 'domain', 80, 0, 0, 86400, 0);
$cookies->set_cookie(0, 'key3', 'val3', '/', 'domain', 80, 0, 0, 86400, 0);
$mech=WWW::Mechanize->new(cookie_jar => $cookies, timeout => 20);
$mech->agent_alias('Windows IE 6');
$url = "http://domain/path";
eval{$mech->get($url)};
if ($@) {
print "there was an error in sending the HTTP GET request";
}
print $mech->content();
下面是 HTTP GET 请求的样子:
GET /path HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Accept-Encoding: gzip
Host: domain
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Cookie: key3=val3
Cookie2: $Version="1"
如您所见,在上面的 HTTP GET 请求 header 中,只发送了最后一个 cookie key3
。如何发送多个 cookie?
这似乎工作正常。
use strict;
use warnings;
use HTTP::Request;
use HTTP::Cookies;
my $jar = HTTP::Cookies->new({});
$jar->set_cookie(0, 'key1', 'val1', '/', 'example.com', 80, 0, 0, 86400, 0);
$jar->set_cookie(0, 'key2', 'val2', '/', 'example.com', 80, 0, 0, 86400, 0);
$jar->set_cookie(0, 'key3', 'val3', '/', 'example.com', 80, 0, 0, 86400, 0);
my $request = HTTP::Request->new( qw{ GET http://www.example.com/ } );
$jar->add_cookie_header($request);
print $request->as_string, "\n";
输出
GET http://www.example.com/
Cookie: key2=val2; key1=val1; key3=val3
Cookie2: $Version="1"
我编写了一个 Perl 脚本来向网站发送 HTTP GET 请求。在请求 header 中,我想设置多个 cookie,这样 header 看起来像
Cookie: key1 = val1; key2 = val2; key3 = val3
我正在使用 HTTP::Cookies
to set the cookies in a WWW::Mechanize
object.
但是set_cookie()
只能在曲奇罐中添加一个曲奇。如何添加多个 cookie?
如果我多次调用 set_cookie()
方法,只有 cookie_jar 中设置的最后一个 cookie 会在 HTTP GET 请求中发送。
下面是我写的代码
#! /usr/bin/perl
use warnings;
use WWW::Mechanize;
use HTTP::Cookies;
$cookies = HTTP::Cookies->new();
$cookies->set_cookie(0, 'key1', 'val1', '/', 'domain', 80, 0, 0, 86400, 0);
$cookies->set_cookie(0, 'key2', 'val2', '/', 'domain', 80, 0, 0, 86400, 0);
$cookies->set_cookie(0, 'key3', 'val3', '/', 'domain', 80, 0, 0, 86400, 0);
$mech=WWW::Mechanize->new(cookie_jar => $cookies, timeout => 20);
$mech->agent_alias('Windows IE 6');
$url = "http://domain/path";
eval{$mech->get($url)};
if ($@) {
print "there was an error in sending the HTTP GET request";
}
print $mech->content();
下面是 HTTP GET 请求的样子:
GET /path HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Accept-Encoding: gzip
Host: domain
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Cookie: key3=val3
Cookie2: $Version="1"
如您所见,在上面的 HTTP GET 请求 header 中,只发送了最后一个 cookie key3
。如何发送多个 cookie?
这似乎工作正常。
use strict;
use warnings;
use HTTP::Request;
use HTTP::Cookies;
my $jar = HTTP::Cookies->new({});
$jar->set_cookie(0, 'key1', 'val1', '/', 'example.com', 80, 0, 0, 86400, 0);
$jar->set_cookie(0, 'key2', 'val2', '/', 'example.com', 80, 0, 0, 86400, 0);
$jar->set_cookie(0, 'key3', 'val3', '/', 'example.com', 80, 0, 0, 86400, 0);
my $request = HTTP::Request->new( qw{ GET http://www.example.com/ } );
$jar->add_cookie_header($request);
print $request->as_string, "\n";
输出
GET http://www.example.com/
Cookie: key2=val2; key1=val1; key3=val3
Cookie2: $Version="1"