【问题标题】:How can I use Perl to send and HTTP request with a cookie?如何使用 Perl 发送带有 cookie 的 HTTP 请求?
【发布时间】:2010-03-19 06:22:19
【问题描述】:

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

  • 创建一个 HTTP 请求
  • 将其发送到任何 URL(例如 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;
}

请告诉如何在“请求”中设置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");

这可能吗??

【问题讨论】:

  • 你自己试过吗?你被什么困住了?我也不确定腻子/技巧与您的问题有何关系。
  • Cookies 存储在客户端。也许您想发送 cookie 值而不是 cookie 本身。
  • +1 pls tell how to set cookie in 'request' 是我以前从未见过的错误消息——甚至在 Perl 中也没有 :)
  • @Jørn Schou-Rode:哎呀!忘记添加“错误消息”他们的..无论如何都解决了问题已编辑。

标签: perl


【解决方案1】:

如前所述,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 查找地址。你在网络代理后面吗?如果是这样,您也需要在 UA 中设置代理,例如:

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

【讨论】:

  • 什么是 $cookies->set_cookie(0,'cookiename', 'value','/','google.com',80,0,0,86400,0);声明你能详细解释一下吗
  • 添加了关于 set_cookie 的详细信息 - 有关更多信息,请查看 HTTP::Cookie 手册页或维基百科的 HTTP Cookie 页面。
【解决方案2】:

【讨论】:

猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 2011-02-01
  • 2018-05-14
  • 2010-10-06
  • 1970-01-01
  • 2011-04-12
  • 2013-06-08
  • 2019-03-04
相关资源
最近更新 更多