なぜ私が)(新しい> LWPから定義された値:: UserAgent-を得ることはありませんか?
-
16-09-2019 - |
質問
私はこのエラーを取得します:
Can't call method cookie_jar on an undefined value
ここに私のコードは次のとおりです。
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
すべてのアイデアは、私はこのエラーを取得する理由は?
解決
私は(厳密に、警告と私は文字列に自由変数を回して、必要なモジュールだと思うと)あなたのコードを試してみた:
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*]$
、それが動作します。あなたは、より完全な例を掲載、またはそれらの間の線がある「新しい$ UA =が...」と「$ UA-> cookie_jar」$ UAが再割り当てされた線やundefをするそうでなければセットのどちらかにしたいのでしょうか?あなたはそれがundefをだと確認する必要がありcookie_jarするだけの呼び出しの前に「$ UA」の値を印刷する場合、それはどこかに最初に割り当て、あなたがそのメソッドを呼び出している間にリセットされなければなりません。
他のヒント
ただの変な相互作用を除外するために、次のことを試してください:
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
さて、何らかの理由で、$ua
は、コンストラクタの呼び出しを意味し、定義されていません。
my $ua = LWP::UserAgent->new;
に失敗しました。私はfastcgi
とあまり慣れていませんよ。しかし、LWP::UserAgent
は、コンストラクタ内の任意の障害にcroaks:私はあなたの質問にラインに到達しているかわからない。
は、サーバーのログを確認しましたか?暗闇の中で総ショット:次のエラーログに任意の有用な情報を追加しています。
?my $ua = eval { LWP::UserAgent->new }
or warn "LWP::UserAgent->new failed: $@";
、それはcookie_jar
に問題はありません。それはちょうどあなたが呼び出すしようと最初の方法であることを起こります。ときに、ユーザー・エージェントを作成するとき、あなたが実際にオブジェクトを取得することを確認します。
すべてのCookieのものを削除し、agent
方法を試してみます:
use strict;
my $ua = eval { LWP::UserAgent->new }
or die "Could not make user-agent! $@";
$ua->agent("TestAgent");
何かがコンストラクタでうまくいかない場合は、それをキャッチすることができるはずです。しかし、あなたのスクリプトはすでに死んで-INGのされていない場合、私はあなたが間違った何かを持っていると思います。 LWP :: UserAgentの場合::新しい実行の問題に、それはすでにcroaks。それが返すことができる唯一のことは、それはすでに上のメソッドを呼び出したことが規定された値です。