Почему я не могу получить определенное значение из LWP :: UserAgent-> new ()? - PullRequest
0 голосов
/ 16 июля 2009

Я получаю эту ошибку при использовании метода 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

Есть идеи, почему я получаю эту ошибку?

Ответы [ 3 ]

6 голосов
/ 16 июля 2009

Я попробовал ваш код (со строгими предупреждениями и, как мне кажется, необходимыми модулями, с превращением свободных переменных в строки):

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? Если вы напечатаете значение '$ ua' непосредственно перед вызовом cookie_jar, вы увидите, что оно undef, оно должно быть сброшено где-то между первым присваиванием и тем местом, где вы вызываете этот метод.

4 голосов
/ 16 июля 2009

Просто чтобы исключить любые странные взаимодействия, попробуйте следующее:

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 хрипит при любом сбое в конструкторе: я не уверен, как вы достигаете рассматриваемой строки.

Вы проверили логи сервера? Total shot in the dark: добавляет ли следующая полезная информация в журнал ошибок?

my $ua = eval { LWP::UserAgent->new }
    or warn "LWP::UserAgent->new failed: $@";
1 голос
/ 16 июля 2009

Если это фактическая ошибка, которую вы получаете, это не проблема с 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 сталкивается с проблемой, это уже каркает. Единственное, что он может вернуть - это определенное значение, для которого он уже вызвал методы.

...