Pregunta

Me sale este error cuando se utiliza el método cookie_jar:

Can't call method cookie_jar on an undefined value

Aquí está mi 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

Cualquier idea de por qué me sale este error?

¿Fue útil?

Solución

He probado el código (con estrictas, advertencias y lo que creo que son los módulos necesarios, con convertir las variables libres en cadenas):

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

y funciona. Es posible que desee o bien poner un ejemplo más completo, o hay líneas entre la 'ua $ = new ...' y el '$ UA-> cookie_jar' líneas donde se vuelve a asignar $ ua o de otro modo conjunto a UNDEF? Si imprime el valor de '$ ua' justo antes de la llamada a cookie_jar usted debe ver que es undef, debe ser restablecer en algún lugar entre la primera asignación y dónde llama ese método.

Otros consejos

Sólo para descartar la existencia de interacciones extrañas, intente lo siguiente:

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

Ahora, por alguna razón, $ua no está definido, es decir, la llamada al constructor:

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

fallado. No estoy muy familiarizado con fastcgi. Sin embargo, LWP::UserAgent estira la pata de cualquier fallo en el constructor:. No estoy seguro de cómo se está llegando a la línea en cuestión

¿Ha comprobado los registros del servidor? tiro en la oscuridad total:? ¿El siguiente añade ninguna información útil para el registro de errores

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

Si ese es el error real que se obtiene, que no es un problema con cookie_jar. Que sólo pasa a ser el primer método se intenta llamar. Compruebe que realmente obtener un objeto cuando se crea cuando el agente de usuario.

Eliminar todo el material de galletas y probar el método agent:

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

Si algo va mal en el constructor, que debe ser capaz de atraparlo. Sin embargo, si la secuencia de comandos no está ya morir-ción, yo creo que hay algo más equivocado. Si LWP :: agente de usuario :: nuevos topa con un problema, ya que estira la pata. La única cosa que puede volver es un valor definido que ya ha llamado a los métodos de.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top