0

cookie_jarメソッドを使用しているときにこのエラーが発生します。

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

このエラーが発生する理由はありますか?

4

3 に答える 3

6

私はあなたのコードを試しました(厳密な警告と、自由変数を文字列に変換するために必要なモジュールだと思います):

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 =new...」と「$ua->cookie_jar」の行の間に、$ uaが再割り当てされるか、undefに設定される行がありますか?cookie_jarを呼び出す直前に'$ua'の値を出力すると、それがundefであることがわかります。最初の割り当てと、そのメソッドを呼び出している場所の間のどこかでリセットされている必要があります。

于 2009-07-16T00:30:21.637 に答える
4

奇妙な相互作用を除外するために、次のことを試してください。

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コンストラクターで障害が発生すると、問題の行にどのように到達しているかわかりません。

サーバーログを確認しましたか?暗闇の中でのトータルショット:以下はエラーログに有用な情報を追加しますか?

my $ua = eval { LWP::UserAgent->new }
    or warn "LWP::UserAgent->new failed: $@";
于 2009-07-16T00:27:11.590 に答える
1

それが実際に発生するエラーである場合は、の問題ではありませんcookie_jar。それはたまたまあなたが呼び出そうとする最初のメソッドです。ユーザーエージェントを作成するときに、実際にオブジェクトを取得することを確認してください。

すべてのCookieを削除して、次のagent方法を試してください。

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

コンストラクターで問題が発生した場合は、それをキャッチできるはずです。ただし、スクリプトがまだ機能していない場合は、別の問題があると思います。LWP :: UserAgent :: newで問題が発生した場合、すでに問題が発生しています。返すことができるのは、すでにメソッドを呼び出している定義済みの値だけです。

于 2009-07-16T16:38:18.273 に答える