perl 为什么我不能从LWP::UserAgent->new()中得到一个定义的值?

z9gpfhce  于 2022-12-13  发布在  Perl
关注(0)|答案(3)|浏览(154)

我在使用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

知道为什么会出现此错误吗?

ny6fqffe

ny6fqffe1#

我试过你的代码(有strict,warnings和我认为是必需的模块,把自由变量变成字符串):

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的,它必须在第一次赋值和调用该方法之间的某个位置被重置。

k4aesqcs

k4aesqcs2#

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

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: $@";
b09cbbtk

b09cbbtk3#

如果这是你得到的实际错误,那就不是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遇到问题,它已经崩溃了。它唯一能返回的是一个已经调用了方法的定义值。

相关问题