Domanda

ottengo questo errore durante l'utilizzo metodo cookie_jar:

Can't call method cookie_jar on an undefined value

Qui è il mio codice:

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

Qualsiasi idea del perché ottengo questo errore?

È stato utile?

Soluzione

Ho provato il codice (con severi avvertimenti, e quello che penso siano i moduli necessari, con trasformando le variabili libere in stringhe):

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 funziona. Si potrebbe desiderare di inviare sia un esempio di piena, o ci sono linee tra il '$ ua = new ...' e il '$ UA> cookie_jar' linee dove $ ua viene riassegnato o meno insieme a undef? Se si stampa il valore di '$ ua' poco prima della chiamata a cookie_jar si dovrebbe vedere che è undef, è necessario essere ripristinato da qualche parte tra il primo incarico e dove si sta chiamando quel metodo.

Altri suggerimenti

Proprio per escludere eventuali interazioni strane, provare quanto segue:

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

Ora, per qualche ragione, $ua non è definito, il che significa che la chiamata al costruttore:

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

fallito. Io non sono troppo familiarità con fastcgi. Tuttavia, LWP::UserAgent gracchia in caso di guasto del costruttore:. Non sono sicuro di come si stanno raggiungendo la linea in questione

Hai controllato i log del server? girato nel buio totale:? Il seguente componente aggiuntivo tutte le informazioni utili per il registro degli errori

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

Se questo è l'errore effettivo si ottiene, non è un problema con cookie_jar. Ciò avviene solo per essere il primo metodo si tenta di chiamare. Controllare che effettivamente ottenere un oggetto quando quando faccia l'user-agent.

Rimuovi tutte le cose biscotto e provare il metodo agent:

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

Se qualcosa va storto nel costruttore, si dovrebbe essere in grado di prenderlo. Tuttavia, se lo script non è già morto-ing, penso che tu abbia qualcosa che non va. Se LWP :: UserAgent :: nuovi imbatte in un problema, gracchia già. L'unica cosa che può restituire è un valore definito che ha già chiamato i metodi via.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top