إرسال طلب POST في PHP: 4 طرق مثبتة مع أمثلة

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

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

ابدأ الدورة

مقدمة: لماذا يحتاج مطور PHP إلى معرفة إرسال طلبات POST؟

\n\n

تخيل هذا الموقف: أنت تبني موقعًا باستخدام PHP، وتحتاج إلى إرسال بيانات إلى خادم آخر. مثلاً، تسجيل مستخدم عبر API خارجي، إرسال نموذج إلى نظام CRM، أو اختبار معالج طلبات POST الخاص بك. هذه مهمة كلاسيكية يواجهها كل مطور ويب.

\n\n

السؤال "How do I send a POST request with PHP?" على Stack Overflow حصد مئات الآلاف من المشاهدات. وهذا ليس صدفة: على الرغم من أن PHP لغة قوية، إلا أن المبتدئين غالبًا ما يقعون في حيرة: أي طريقة يجب أن أختار؟ هل من المستحيل ببساطة إرسال البيانات؟

\n\n

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

\n\n

الطريقة 1. الكلاسيكية: cURL (الأكثر مرونة وقوة)

\n\n

cURL هي مكتبة موجودة على جميع خوادم الاستضافة تقريبًا. تدعم HTTPS والكوكيز والهيدرات والمهلات الزمنية وغيرها الكثير. إذا كنت بحاجة إلى إرسال طلب POST بأقصى درجة من التحكم، فاختر cURL.

\n\n

مثال بسيط: إرسال نموذج يحتوي على حقلين name و email

\n\n
<?php\n$url = 'https://api.example.com/submit';\n$data = [\n    'name' => 'أحمد علي',\n    'email' => 'ahmed@example.com'\n];\n\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));\n// إذا كنت بحاجة لإرسال JSON:\n// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n// curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\nif ($httpCode === 200) {\n    echo "تم بنجاح! رد الخادم: " . $response;\n} else {\n    echo "خطأ. كود HTTP: " . $httpCode;\n}\n?>
\n\n

نقاط هامة حول cURL:

\n
    \n
  • http_build_query() — تحول المصفوفة إلى سلسلة نصية مثل name=أحمد&email=ahmed@example.com. هذا هو التنسيق القياسي للنماذج.
  • \n
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) — لجعل نتيجة الطلب تُعاد كمتغير بدلاً من طباعتها مباشرة.
  • \n
  • تحقق دائمًا من كود HTTP للرد (200 يعني نجاح، 4xx/5xx يعني خطأ).
  • \n
  • إذا كان الخادم يتطلب JSON: استبدل http_build_query بـ json_encode وأضف الهيدر Content-Type: application/json.
  • \n
\n\n

الطريقة 2. سريعة وبسيطة: file_get_contents مع السياق

\n\n

كثيرون يعرفون file_get_contents() كدالة لقراءة الملفات. لكن القليل يعلمون أنه باستخدام Stream Context يمكنها إرسال طلبات POST. هذا خيار ممتاز إذا كانت مهمتك بسيطة ولا تريد استخدام مكتبات خارجية.

\n\n

مثال لإرسال طلب POST عبر file_get_contents

\n\n
<?php\n$url = 'https://api.example.com/submit';\n$data = [\n    'name' => 'أحمد علي',\n    'email' => 'ahmed@example.com'\n];\n\n$options = [\n    'http' => [\n        'header'  => "Content-Type: application/x-www-form-urlencoded\\r\\n",\n        'method'  => 'POST',\n        'content' => http_build_query($data)\n    ]\n];\n$context = stream_context_create($options);\n$result = file_get_contents($url, false, $context);\n\nif ($result === false) {\n    echo "حدث خطأ أثناء إرسال الطلب";\n} else {\n    echo "رد الخادم: " . $result;\n}\n?>
\n\n

متى تستخدم هذه الطريقة؟

\n
    \n
  • عندما تحتاج إلى اختبار إرسال البيانات بسرعة.
  • \n
  • عندما لا تريد كتابة الكثير من الأكواد باستخدام cURL.
  • \n
  • العيب: صعوبة معالجة الأخطاء (لا يوجد وصول مباشر لكود HTTP).
  • \n

المدونات

توصيات الكتب