لماذا لا أحصل على قيمة محددة من LWP :: UserAgent-> جديد ()؟

StackOverflow https://stackoverflow.com/questions/1134739

  •  16-09-2019
  •  | 
  •  

سؤال

أحصل على هذا الخطأ أثناء استخدام طريقة 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

أي فكرة لماذا أحصل على هذا الخطأ؟

هل كانت مفيدة؟

المحلول

لقد جربت الكود الخاص بك (مع تحذيرات صارمة، وما أعتقد أن الوحدات النمطية المطلوبة، مع تحويل المتغيرات المجانية إلى سلاسل):

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؟ إذا قمت بطباعة قيمة "$ UA" فقط قبل الاتصال إلى Cookie_Jar، فيجب أن ترى أنه UNDEF، يجب إعادة تعيين مكان ما بين المهمة الأولى وأين تتصل بهذه الطريقة.

نصائح أخرى

فقط لاستبعاد أي تفاعلات غريبة، جرب ما يلي:

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. وبعد يحدث هذا فقط أن تكون الطريقة الأولى التي تحاول الاتصال بها. تحقق من أن تحصل فعلا على كائن عند عند إجراء وكيل المستخدم.

إزالة كل الاشياء ملف تعريف الارتباط وجرب agent طريقة:

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

إذا حدث خطأ في أي شيء في المنشئ، يجب أن تكون قادرا على التقاطه. ومع ذلك، إذا كان البرنامج النصي الخاص بك لا يموت بالفعل، أعتقد أن لديك شيئا آخر خطأ. إذا LWP :: USAGENT :: جديد يعمل في مشكلة، فإنه بالفعل كروات. الشيء الوحيد الذي يمكن أن يعود هو قيمة محددة قد اتصلت به بالفعل الأساليب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top