Perché non ottengo un valore definito da LWP :: UserAgent-> new ()?
-
16-09-2019 - |
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?
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.