عميل HTTP في PHP: إجراء الطلبات بشكل صحيح

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا تحتاج إلى عميل HTTP في PHP؟

تطبيقات الويب الحديثة نادرًا ما توجد بمعزل عن غيرها. فهي تتفاعل مع واجهات برمجة التطبيقات الخارجية، وخدمات بنية الخدمات المصغرة، وأنظمة التحليلات، وبوابات الدفع. في أساس هذا التفاعل يكمن بروتوكول HTTP. بالنسبة لمطور PHP، فإن القدرة على إرسال طلبات HTTP بشكل صحيح ليست مجرد مهارة مفيدة، بل هي جزء إلزامي من مجموعة الأدوات المهنية.

في هذه المقالة، سنستعرض ثلاث طرق رئيسية لإنشاء عميل HTTP في PHP: من البسيط file_get_contents() إلى القوي cURL والحزمة الحديثة Guzzle. ستتعلم كيفية اختيار الأداة المناسبة، ومعالجة الأخطاء، والعمل مع الرؤوس، وضمان أمان الطلبات.



1. الطلبات البسيطة باستخدام file_get_contents()

أبسط طريقة لإرسال طلب GET في PHP هي استخدام الدالة المضمنة file_get_contents(). هذه الطريقة مناسبة للنماذج الأولية السريعة والسيناريوهات البسيطة عندما لا تكون هناك حاجة لضبط دقيق للاتصال.



طلب GET أساسي

<?php$url = 'https://api.example.com/data';$response = file_get_contents($url);if ($response === false) {    echo 'خطأ في الحصول على البيانات';} else {    echo $response;}?>


إعداد سياق التدفقات

للتحكم في الرؤوس وطريقة الطلب، استخدم stream_context_create(). يتيح ذلك إرسال طلبات POST وتعيين رؤوس مخصصة.

<?php$data = json_encode(['name' => 'John', 'email' => 'john@example.com']);$options = [    'http' => [        'method' => 'POST',        'header' => "Content-Type: application/json\\r" .                     "Accept: application/json\\r",        'content' => $data    ]];$context = stream_context_create($options);$result = file_get_contents('https://api.example.com/users', false, $context);if ($result === false) {    // معالجة الخطأ}?>

العيوب: file_get_contents() لا يدعم الكوكيز، أو مهلات الاتصال، أو معالجة إعادة التوجيه، أو العمل مع شهادات SSL. للمشاريع الجادة، من الأفضل استخدام cURL أو Guzzle.



2. cURL القوي والمرن

إضافة cURL (Client URL Library) هي الأداة القياسية للعمل مع HTTP في PHP. توفر تحكمًا كاملاً في الطلب: الرؤوس، المحتوى، المهلات، المصادقة، العمل مع الملفات، وأكثر من ذلك بكثير.



طلب GET أساسي باستخدام cURL

<?php$ch = curl_init('https://api.example.com/data');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_TIMEOUT, 30);$response = curl_exec($ch);if (curl_errno($ch)) {    echo 'خطأ cURL: ' . curl_error($ch);} else {    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);    echo "كود HTTP: $httpCode";    echo $response;}curl_close($ch);?>


طلب POST مع JSON والرؤوس

<?php$postData = ['title' => 'PHP HTTP Client', 'body' => 'مثال على طلب'];$jsonData = json_encode($postData);$ch = curl_init('https://jsonplaceholder.typicode.com/posts');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => $jsonData,    CURLOPT_HTTPHEADER => [        'Content-Type: application/json',        'Accept: application/json',        'Authorization: Bearer YOUR_TOKEN_HERE'    ],    CURLOPT_TIMEOUT => 15,    CURLOPT_SSL_VERIFYPEER => true // في الإنتاج دائمًا true!]);$result = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);if ($httpCode >= 200 && $httpCode < 300) {    $decoded = json_decode($result, true);    print_r($decoded);} else {    echo "خطأ: HTTP $httpCode";}?>


خيارات cURL المفيدة

  • CURLOPT_

المدونات

توصيات الكتب