0

使用 cookie_jar 方法时出现此错误:

Can't call method cookie_jar on an undefined value

这是我的代码:

my $cookie_jar= new HTTP::Cookies;
my $ua=new LWP::UserAgent;
my %cookies= fetch CGI::Cookie;
my $encoded=$cookies{'SCred'};
$cookie_jar->set_cookie(1, "SCred", $encoded, "/", $SSO_DOMAIN,  "", 0, 0, 60*60, 0);
$ua->cookie_jar($cookie_jar); # I get error on this line

知道为什么我会收到此错误吗?

4

3 回答 3

6

我已经尝试了您的代码(带有严格的警告和我认为是必需的模块,将自由变量转换为字符串):

kyle@indigo64 ~[home*]$ cat x.pl
use strict;
use warnings;
use HTTP::Cookies;
use LWP::UserAgent;
use CGI::Cookie;

my $ua         = new LWP::UserAgent;
my %cookies    = fetch CGI::Cookie;
my $encoded    = $cookies{'SCred'};

my $cookie_jar = new HTTP::Cookies;
$cookie_jar->set_cookie(
  1, "SCred", '$encoded',
  "/", '$SSO_DOMAIN',  "",
  0, 0, 60*60, 0
);
$ua->cookie_jar($cookie_jar);

print "ua: ",$ua,"\n";
print "ua->cookie_jar: ",$ua->cookie_jar,"\n";
mortis@indigo64 ~[home*]$ perl x.pl
ua: LWP::UserAgent=HASH(0x82f8cc8)
ua->cookie_jar: HTTP::Cookies=HASH(0x82f8b84)
kyle@indigo64 ~[home*]$ 

它有效。您可能想发布一个更完整的示例,或者在“$ua = new...”和“$ua->cookie_jar”行之间是否存在重新分配 $ua 或设置为 undef 的行?如果您在调用 cookie_jar 之前打印 '$ua' 的值,您应该看到它是 undef,它必须在第一次分配和调用该方法之间的某个位置被重置。

于 2009-07-16T00:30:21.637 回答
4

只是为了排除任何奇怪的交互,请尝试以下操作:

my $cookie_jar = HTTP::Cookies->new;
my $ua = LWP::UserAgent->new;
my %cookies = CGI::Cookie->fetch;
my $encoded = $cookies{'SCred'};
$cookie_jar->set_cookie(
    1, "SCred", $encoded, "/", $SSO_DOMAIN,  "", 0, 0, 60*60, 0
);
$ua->cookie_jar($cookie_jar); # I get error on this line

现在,由于某种原因,$ua未定义,这意味着构造函数调用:

my $ua = LWP::UserAgent->new;

失败的。我不太熟悉fastcgi。但是,LWP::UserAgent构造函数中的任何失败都会发牢骚:我不确定您是如何到达有问题的行的。

你检查过服务器日志吗?黑暗中的总拍摄:以下是否将任何有用的信息添加到错误日志中?

my $ua = eval { LWP::UserAgent->new }
    or warn "LWP::UserAgent->new failed: $@";
于 2009-07-16T00:27:11.590 回答
1

如果这是您得到的实际错误,那么cookie_jar. 这恰好是您尝试调用的第一个方法。在制作用户代理时检查您是否真的得到了一个对象。

删除所有 cookie 内容并尝试以下agent方法:

use strict;
my $ua = eval { LWP::UserAgent->new }
    or die "Could not make user-agent! $@";
$ua->agent("TestAgent");

如果构造函数中出现任何问题,您应该能够捕捉到它。但是,如果您的脚本还没有死,我认为您还有其他问题。如果 LWP::UserAgent::new 遇到问题,它就已经崩溃了。它唯一可以返回的是一个已定义的值,它已经调用了方法。

于 2009-07-16T16:38:18.273 回答