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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

في هذه المقالة، سنستعرض نهجين رئيسيين: استخدام إضافة cURL المدمجة ومكتبة Guzzle الشهيرة. ستتعلم كيفية إرسال طلبات GET و POST و PUT و DELETE بشكل صحيح، ومعالجة الأخطاء، والعمل مع الرؤوس. ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم.

\n\n

1. أساسيات عميل HTTP بلغة PHP: العمل مع cURL

\n\n

1.1. ما هو cURL ولماذا هو مهم

\n\n

cURL (Client URL Library) هي إضافة قوية للغة PHP تتيح التفاعل مع خوادم مختلفة عبر بروتوكولات HTTP و HTTPS و FTP وغيرها. وهي مضمنة في التوزيعة القياسية لـ PHP، ولكنها قد تتطلب تفعيلًا منفصلًا في ملف php.ini. تمنحك cURL تحكمًا كاملاً في الطلب: يمكنك تعيين أي طريقة، ورؤوس، ونص الطلب، ومهلات زمنية.

\n\n

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

\n\n

لنبدأ بأكثر السيناريوهات شيوعًا - الحصول على البيانات من الخادم. لنلقِ نظرة على مثال لطلب إلى API العام JSONPlaceholder:

\n\n
<?php\n// تهيئة جلسة cURL\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n\n// إعداد الخيارات\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_HTTPGET, true);\ncurl_setopt($ch, CURLOPT_TIMEOUT, 30);\n\n// تنفيذ الطلب\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n\n// التحقق من الأخطاء\nif (curl_errno($ch)) {\n    echo 'خطأ cURL: ' . curl_error($ch);\n} else {\n    echo "كود HTTP: $httpCode\\n";\n    $data = json_decode($response, true);\n    print_r($data);\n}\n\n// إغلاق الجلسة\ncurl_close($ch);\n?>
\n\n

لاحظ: نتحقق دائمًا من كود الاستجابة ووجود الأخطاء. يضمن CURLOPT_RETURNTRANSFER إرجاع النتيجة إلى متغير بدلاً من عرضها مباشرة.

\n\n

1.3. إرسال طلب POST مع البيانات

\n\n

لإرسال البيانات إلى الخادم (على سبيل المثال، عند إنشاء سجل جديد) نستخدم POST. يمكن تمرير البيانات كمصفوفة أو سلسلة JSON:

\n\n
<?php\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts');\n\n$postData = [\n    'title' => 'منشور جديد',\n    'body' => 'محتوى المنشور',\n    'userId' => 1\n];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_POSTFIELDS => json_encode($postData), // JSON\n    CURLOPT_HTTPHEADER => [\n        'Content-Type: application/json',\n        'Accept: application/json'\n    ],\n    CURLOPT_TIMEOUT => 30\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\necho "كود HTTP: $httpCode\\n";\necho $response;\n?>
\n\n

النقطة الأساسية: إذا قمت بتمرير مصفوفة إلى CURLOPT_POSTFIELDS، فسيقوم PHP تلقائيًا بتشفيرها كـ application/x-www-form-urlencoded. بالنسبة لـ JSON، يجب استخدام json_encode() وتحديد الرأس Content-Type بشكل صريح.

\n\n

1.4. طلبات PUT و DELETE

\n\n

لتحديث وحذف الموارد، يتم استخدام طريقتي PUT و DELETE. في cURL، يتم تعيينهما عبر الخيار CURLOPT_CUSTOMREQUEST:

\n\n
<?php\n// طلب PUT (تحديث)\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n$updateData = ['title' => 'عنوان محدث'];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_CUSTOMREQUEST => 'PUT',\n    CURLOPT_POSTFIELDS => json_encode($updateData),\n    CURLOPT_HTTPHEADER =>                

المدونات

توصيات الكتب