Почему я не получу определенное значение от lwp :: useragent-> new ()?
-
16-09-2019 - |
Вопрос
Я получаю эту ошибку при использовании метода 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
Есть идеи, почему я получаю эту ошибку?
Решение
Я попробовал ваш код (со строгими, предупреждениями и тем, что я думаю, необходимые модули, с превращением свободных переменных в строки):
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, вы должны увидеть, что это нереф, это должно быть сброшено где -то между первым заданием и тем, где вы называете этот метод.
Другие советы
Просто чтобы исключить любые странные взаимодействия, попробуйте следующее:
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: $@";
Если это фактическая ошибка, которую вы получаете, это не проблема с cookie_jar
. Анкет Это просто первый метод, который вы пытаетесь позвонить. Убедитесь, что вы на самом деле получаете объект, когда при создании пользовательского агента.
Удалите все куки и попробуйте agent
Метод:
use strict;
my $ua = eval { LWP::UserAgent->new }
or die "Could not make user-agent! $@";
$ua->agent("TestAgent");
Если что -то пойдет не так в конструкторе, вы сможете его поймать. Однако, если ваш сценарий еще не умирает, я думаю, что у вас что-то не так. Если lwp :: useragent :: new Running в проблему, это уже рассылается. Единственное, что он может вернуть, - это определенное значение, на которое он уже назвал методы.