كيفية إرسال طلب POST في PHP: من المبتدئ إلى المحترف
هل سبق لك أن واجهت موقفًا حيث يحتاج نص PHP الخاص بك إلى "التحدث" مع خادم آخر؟ إرسال بيانات نموذج، استدعاء API خارجي، أو ببساطة التحقق مما إذا كانت نقطة النهاية البعيدة تعمل؟ إذا كان الأمر كذلك، فمن المحتمل أنك تساءلت: "How do I send a POST request with PHP?". هذا أحد أكثر الأسئلة شيوعًا على Stack Overflow، وليس من دون سبب - فالتفاعل بين الخوادم هو أساس الويب الحديث.
في هذه المقالة، سنستعرض أربع طرق مثبتة لإرسال طلب POST في PHP. ستتعلم كيفية القيام بذلك باستخدام cURL، file_get_contents، stream_context_create وعميل HTTP القوي Guzzle. لن نعرض الكود فقط - بل سنشرح أي طريقة تختار لمهمتك وكيفية تجنب الأخطاء النموذجية.
هيا بنا! 🚀
ما هو طلب POST ولماذا هو مطلوب في PHP؟
POST هي إحدى طرق بروتوكول HTTP، مصممة لإرسال البيانات إلى الخادم. على عكس GET، حيث تظهر المعلمات في URL، ينقل POST البيانات في جسم الطلب. هذا مفيد عندما تحتاج إلى:
- إرسال نموذج تسجيل أو طلب؛
- استدعاء REST API (على سبيل المثال، إنشاء سجل جديد في CRM)؛
- نقل ملف إلى خادم بعيد؛
- تسجيل الدخول إلى خدمة خارجية.
في PHP، لا توجد دالة مدمجة "sendPostRequest()"، ولكن هناك عدة أدوات مرنة تسمح بذلك. دعنا نستعرض كلًا منها.
الطريقة 1: cURL - الجندي العالمي
cURL (Client URL Library) هي على الأرجح الطريقة الأكثر شيوعًا لإرسال طلبات HTTP في PHP. تدعم العديد من البروتوكولات، وتعمل مع SSL، والكوكيز، والمهلات، والبروكسي. إذا كنت تكتب شيئًا أكثر جدية من نص تعليمي - فانظر إلى cURL.
طلب POST بسيط باستخدام cURL
هذا مثال أساسي يرسل طلب POST إلى خادم الاختبار JSONPlaceholder ويعرض الرد:
// 1. إنشاء مورد cURL جديد$ch = curl_init();
// 2. تحديد URL لنقطة النهايةcurl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");
// 3. الإشارة إلى أن هذا طلب POSTcurl_setopt($ch, CURLOPT_POST, 1);
// 4. تمرير البيانات (يتم تحويل مصفوفة PHP تلقائيًا إلى سلسلة استعلام)curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'title' => 'منشوري الأول', 'body' => 'هذا هو نص المنشور', 'userId' => 1]));
// 5. إرجاع النتيجة بدلاً من عرضها مباشرةcurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 6. تنفيذ الطلب$response = curl_exec($ch);
// 7. التحقق من الأخطاءif (curl_errno($ch)) { echo 'خطأ cURL: ' . curl_error($ch);} else { // 8. إغلاق الاتصال curl_close($ch); // 9. عرض النتيجة echo $response;}POST مع JSON والترويسات
تعمل واجهات API الحديثة غالبًا مع JSON. إليك كيفية إرسال بيانات JSON وتعيين الترويسة الصحيحة Content-Type:
$data = [ 'email' => 'user@example.com', 'password' => 'secret123'];
$ch = curl_init('https://api.example.com/login');curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Accept: application/json']);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // الحصول على كود HTTP للرد
curl_close($ch);
if ($httpCode === 200) { $result = json_decode($response, true); print_r($result);} else { echo "خطأ: HTTP $httpCode";}لماذا cURL؟ تمنحك تحكمًا كاملاً: يمكنك ضبط المهلة (CURLOPT_TIMEOUT)، متابعة إعادة التوجيه (CURLOPT_FOLLOWLOCATION)، إرسال ملف (CURLFile) وحتى العمل مع FTP. العيب الوحيد هو أن الكود يصبح مطولًا.