PHP و cURL و HTTP POST: كيفية إرسال البيانات كمحترف في 2025
\n\nإذا سبق لك كتابة كود PHP يحتاج إلى "التحدث" مع خادم آخر — إرسال نموذج، استدعاء API، أو مجرد نقل بيانات — فمن المحتمل أنك واجهت cURL. إنها ليست مجرد مكتبة، بل هي سكين سويسري لطلبات HTTP. وعلى الرغم من وجود أدوات أكثر حداثة في 2025 مثل Guzzle أو Symfony HttpClient، إلا أن cURL تظل الأساس الذي يجب أن يعرفه كل مطور PHP.
\n\nسؤال "PHP, cURL, and HTTP POST example?" على Stack Overflow حصد آلاف المشاهدات. لماذا؟ لأنها المهمة التي تظهر في كل مشروع ثانٍ: من التكامل مع أنظمة الدفع إلى إرسال البيانات إلى CRM. دعنا نفهم كيف نفعل ذلك بشكل صحيح وآمن وجميل.
\n\nما هو cURL ولماذا هو مطلوب في PHP؟
\n\ncURL (Client URL) هي مكتبة قوية تسمح لسكريبت PHP الخاص بك بالعمل كعميل HTTP. تخيل أن الكود الخاص بك هو متصفح بدون واجهة. يمكنه فتح الصفحات، إرسال النماذج، تنزيل الملفات، وحتى العمل مع الكوكيز.
\n\nفي 2025، تظل cURL ذات صلة لأن:
\n- \n
- مدمجة في PHP (لا حاجة لتثبيت حزم إضافية) \n
- تعمل بشكل أسرع من بعض المكتبات "الثقيلة" \n
- تمنح تحكمًا كاملاً في كل جانب من جوانب الطلب \n
- تدعم جميع البروتوكولات الحديثة: HTTP/2، HTTPS، FTP وحتى IMAP \n
مثال أساسي: إرسال طلب POST باستخدام cURL
\n\nلنبدأ بالكلاسيكيات. إليك الحد الأدنى من الكود العملي الذي يرسل طلب POST إلى الخادم:
\n\n<?php\n// الرابط الذي نرسل إليه البيانات\n$url = 'https://api.example.com/submit';\n\n// البيانات المراد إرسالها (مصفوفة ترابطية)\n$postData = [\n 'name' => 'إيفان بيتروف',\n 'email' => 'ivan@example.com',\n 'message' => 'مرحبًا من 2025!'\n];\n\n// تهيئة cURL\n$ch = curl_init($url);\n\n// إعدادات الطلب\ncurl_setopt_array($ch, [\n CURLOPT_POST => true, // هذا طلب POST\n CURLOPT_POSTFIELDS => http_build_query($postData), // البيانات بتنسيق سلسلة\n CURLOPT_RETURNTRANSFER => true, // إرجاع الرد كسلسلة\n CURLOPT_HEADER => false, // عدم إرجاع الرؤوس\n CURLOPT_TIMEOUT => 30, // مهلة 30 ثانية\n CURLOPT_SSL_VERIFYPEER => true, // التحقق من شهادة SSL\n]);\n\n// تنفيذ الطلب\n$response = curl_exec($ch);\n\n// التحقق من الأخطاء\nif (curl_errno($ch)) {\n echo 'خطأ cURL: ' . curl_error($ch);\n} else {\n $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n echo "رمز استجابة HTTP: $httpCode\\n";\n echo "محتوى الرد: $response";\n}\n\n// إغلاق الاتصال\ncurl_close($ch);\n?>\n\nلاحظ استخدام http_build_query(). هذه دالة مفيدة تحول المصفوفة إلى سلسلة مشفرة بعنوان URL. بدونها، قد يعالج cURL البيانات بشكل غير صحيح.
إرسال JSON بدلاً من النموذج
\n\nفي 2025، تعمل معظم APIs مع JSON بدلاً من نماذج POST التقليدية. إليك كيفية تكييف مثالنا:
\n\n<?php\n$url = 'https://api.example.com/v2/users';\n$jsonData = json_encode([\n 'username' => 'developer_2025',\n 'password' => 'secret_password',\n 'role' => 'admin'\n]);\n\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n CURLOPT_POST => true,\n CURLOPT_POSTFIELDS => $jsonData, // إرسال JSON خام\n CURLOPT_HTTPHEADER => [ // مهم: تحديد الرؤوس\n 'Content-Type: application/json',\n 'Content-Length: ' . strlen($jsonData),\n 'Accept: application/json'\n ],\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_TIMEOUT => 15,\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\nif ($htt