Pergunta

Eu recebo este erro enquanto estiver usando cookie_jar método:

Can't call method cookie_jar on an undefined value

Aqui é o meu código:

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

Alguma idéia de por que eu recebo este erro?

Foi útil?

Solução

Eu tentei seu código (com estrita, avisos e que eu acho que são os módulos necessários, com giro livre variáveis em cadeias de caracteres):

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*]$ 

e ele funciona.Você pode querer colocar um fuller exemplo, ou existem linhas entre o '$ua = novo...' e o '$ua->cookie_jar linhas onde a $ua é re-atribuído ou de outra forma definido para undef?Se você imprimir o valor de "$ua' antes da chamada para cookie_jar você deve ver que é indefinido, ele deve ser reposto em algum lugar entre a primeira atribuição e onde você está chamando o método.

Outras dicas

Só para descartar quaisquer interações estranhas, tente o seguinte:

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

Agora, por algum motivo, $ua é indefinido, o que significa que a chamada do construtor:

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

fracassado. Eu não estou muito familiarizado com fastcgi. No entanto, LWP::UserAgent Croaks sobre qualquer falha no construtor: não tenho certeza de como você está alcançando a linha em questão.

Você verificou os logs do servidor? Totão total no escuro: o seguinte adiciona alguma informação útil ao log de erros?

my $ua = eval { LWP::UserAgent->new }
    or warn "LWP::UserAgent->new failed: $@";

Se esse é o erro real que você recebe, não é um problema com cookie_jar. Esse é o primeiro método que você tenta ligar. Verifique se você realmente obtém um objeto quando fizer o agente do usuário.

Remova todas as coisas de biscoito e tente o agent método:

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

Se algo der errado no construtor, você poderá pegá -lo. No entanto, se seu script ainda não estiver morra, acho que você tem algo mais errado. Se o LWP :: UserAgent :: New for um problema, ele já croaks. A única coisa que pode retornar é um valor definido que ele já chamou de métodos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top