جلب المعلومات
لجلب اي صفحة ويب يمكن ان نستخدم مكتبة LWP::UserAgent لتقوم بعملية طلب و احضار الصفحة الالكترونية . ملاحظة : يمكن استخدام اي مكتبة اخرى مثلا: HTTP::Tiny, HTTP::Lite
في المثال ادناه سنقوم بتنفيذ طلب جلب باستخدام الامر GET
use LWP::UserAgent; my $ua = LWP::UserAgent->new(agent => 'MyWebScaper/1.0 <http://example.com>'); my $response = $ua->get('http://example:3000/'); if ($response->is_success) { say $response->decoded_content; } else { die $response->status_line; }
بعد تنفيذ هذا الكود فسنتحصل على نسخة من الصفحة التي طلبناها اذا تمت العملية بنجاح. او في حالة فشل عملية الاتصال و تحميل الصفحة سيرجع لنا الكود رسالة خطأ
لنقم بمحاولة تنزيل صفحة غير موجودة على السيرفر:
use LWP::UserAgent; my $ua = LWP::UserAgent->new(agent => 'MyWebScaper/1.0 <http://example.com>'); my $response = $ua->get('http://example:3000/not_found'); if ($response->is_success) { say $response->decoded_content; } else { die $response->status_line; }
هنا الخطأ سيقع في جهة السيرفر و سيقوم السيرفر بارجاع رسالة الخطأ، و لكن ماذا لو فشلت عملية الاتصال بالسيرفر اساسا؟
use LWP::UserAgent; my $ua = LWP::UserAgent->new(agent => 'MyWebScaper/1.0 <http://example.com>'); my $response = $ua->get('http://unknown.server'); if ($response->is_success) { say $response->decoded_content; } else { die $response->status_line; }
في هذه الحالة سنتحصل على الخطأ 500. و لكن يبدو ان السيرفر يعمل و لكن بشكل غير صحيح و هذا خلاف الواقع. لكي نتعرف على مصدر الخطا هل هو خارجي او داخلي توفر مكتبة LWP رسالة تنبيهية خاصة، انظر الكود التالية: use LWP::UserAgent;
my $ua = LWP::UserAgent->new(agent => 'MyWebScaper/1.0 <http://example.com>'); my $response = $ua->get('http://unknown.server'); my $client_warning = $response->headers->header('Client-Warning'); if ($client_warning && $client_warning eq 'Internal response') { die 'Internal error: ' . $response->status_line; } else { die 'Server error: ' . $response->status_line; }
الان يمكننا ان نتأكد من ان الخطأ جاء من طرفنا.
تمرين
قم بتنزيل صفحة من السيرفر الافتراضي http://example:3000
و قم بطباعة حجمها بالبايتس
use LWP::UserAgent; my $ua = LWP::UserAgent->new; ... say ...