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

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

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

ابدأ الدورة

مقدمة



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



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



1. الطريقة الأبسط: file_get_contents



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



طلب GET بسيط



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


إضافة الرؤوس عبر stream context



لإضافة رؤوس أو تغيير طريقة الطلب، يجب استخدام stream_context_create():



<?php$url = 'https://api.example.com/data';$options = [    'http' => [        'method' => 'GET',        'header' => "Accept: application/json\\r" .                     "Authorization: Bearer your-token\\r"    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);if ($response === false) {    echo 'خطأ في الطلب';} else {    $data = json_decode($response, true);    print_r($data);}?>


طلب POST عبر file_get_contents



<?php$url = 'https://api.example.com/create';$data = ['name' => 'John', 'email' => 'john@example.com'];$options = [    'http' => [        'method' => 'POST',        'header' => "Content-Type: application/json\\r",        'content' => json_encode($data)    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);?>


عيوب file_get_contents:

  • لا يدعم المهلات الزمنية (ينتظر إلى أجل غير مسمى افتراضيًا)
  • من الصعب معالجة أخطاء الاتصال
  • لا توجد إمكانية لتنزيل الملفات على أجزاء
  • غير مناسب للسيناريوهات المعقدة


2. أداة قوية: cURL



cURL هي أداة قياسية للعمل مع HTTP في PHP. توفر تحكمًا كاملاً في الطلبات وتدعم جميع إمكانيات البروتوكول تقريبًا.



التهيئة الأساسية وطلب GET



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


طلب POST مع بيانات



<?php$ch = curl_init('https://api.example.com/users');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => json_encode([        'name' => 'Jane Doe',        'email' => 'jane@example.com'    ]),    CURLOPT_HTTPHEADER => [        'Content-Type: application/json',        'Accept: application/json'    ],    CURLOPT_TIMEOUT => 30,    CURLOPT_CONNECTTIMEOUT => 10]);$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);

?>

المدونات

توصيات الكتب