使用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
知道我为什么会收到这个错误吗?
答案 0 :(得分: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,它必须在第一个赋值和你调用该方法的位置之间重置。
答案 1 :(得分: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: $@";
答案 2 :(得分: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遇到问题,它已经呱呱叫了。它唯一可以返回的是一个已经调用了方法的定义值。