Frage

Ich erhalte diesen Fehler, während ich Cookie_jar -Methode verwende:

Can't call method cookie_jar on an undefined value

Hier ist mein Code:

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

Irgendeine Idee, warum ich diesen Fehler bekomme?

War es hilfreich?

Lösung

Ich habe Ihren Code ausprobiert (mit strikten, Warnungen und meiner Meinung nach sind die erforderlichen Module, wobei die freien Variablen in Saiten verwandelt werden):

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

und es funktioniert. Vielleicht möchten Sie entweder ein umfassenderes Beispiel veröffentlichen oder gibt es Linien zwischen '$ ua = new ...' und den Zeilen '$ ua-> cookie_jar', in denen $ UA neu zugewiesen oder auf andere Weise auf UNDEF eingestellt ist? Wenn Sie den Wert von '$ ua' kurz vor dem Anruf bei Cookie_Jar ausdrucken, sollten Sie sehen, dass er nicht zwischen der ersten Aufgabe und dem Aufrufen dieser Methode zurückgesetzt werden muss.

Andere Tipps

Um nur seltsame Interaktionen auszuschließen, probieren Sie Folgendes aus:

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

Nun aus irgendeinem Grund, $ua ist undefiniert, was den Konstruktoraufruf bedeutet:

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

gescheitert. Ich bin nicht allzu vertraut mit fastcgi. Jedoch, LWP::UserAgent Croaks zu einem Versagen des Konstruktors: Ich bin mir nicht sicher, wie Sie die fragliche Linie erreichen.

Haben Sie die Serverprotokolle überprüft? Total Shot im Dunkeln: Fügt das folgende nützliche Informationen zum Fehlerprotokoll hinzu?

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

Wenn dies der tatsächliche Fehler ist, den Sie erhalten, ist dies kein Problem mit cookie_jar. Das ist zufällig die erste Methode, die Sie anrufen möchten. Überprüfen Sie, ob Sie tatsächlich ein Objekt erhalten, wenn Sie den Benutzeragent machen.

Entfernen Sie das gesamte Cookie -Zeug und probieren Sie das aus agent Methode:

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

Wenn im Konstruktor etwas schief geht, sollten Sie es fangen können. Wenn Ihr Skript jedoch nicht schon stirbt, denke ich, dass Sie etwas anderes falsch sind. Wenn LWP :: UserAgent :: New ein Problem läuft, krächzen es bereits. Das einzige, was es zurückgeben kann, ist ein definierter Wert, für den es bereits Methoden bezeichnet hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top