PHP, cURL et HTTP POST : comment envoyer des données comme un pro en 2025
\n\nSi vous avez déjà écrit du code PHP qui devait "parler" à un autre serveur — envoyer un formulaire, appeler une API ou simplement transmettre des données — vous avez sûrement rencontré cURL. Ce n'est pas juste une bibliothèque, c'est un couteau suisse pour les requêtes HTTP. Et même si en 2025 nous avons des outils plus modernes comme Guzzle ou Symfony HttpClient, cURL reste le fondement que tout développeur PHP doit connaître.
\n\nLa question "PHP, cURL, and HTTP POST example?" sur Stack Overflow a rassemblé des milliers de vues. Pourquoi ? Parce que c'est la tâche que l'on rencontre dans un projet sur deux : de l'intégration avec des systèmes de paiement à l'envoi de données dans un CRM. Voyons comment faire cela correctement, en toute sécurité et avec élégance.
\n\nQu'est-ce que cURL et pourquoi en a-t-on besoin en PHP ?
\n\ncURL (Client URL) est une bibliothèque puissante qui permet à votre script PHP d'agir comme un client HTTP. Imaginez que votre code est un navigateur sans interface. Il peut ouvrir des pages, envoyer des formulaires, télécharger des fichiers et même gérer les cookies.
\n\nEn 2025, cURL reste pertinent car :
\n- \n
- Il est intégré à PHP (pas besoin d'installer de paquets supplémentaires) \n
- Il fonctionne plus rapidement que certaines bibliothèques "lourdes" \n
- Il donne un contrôle total sur chaque aspect de la requête \n
- Il prend en charge tous les protocoles modernes : HTTP/2, HTTPS, FTP et même IMAP \n
Exemple de base : envoyer une requête POST avec cURL
\n\nCommençons par les classiques. Voici un code fonctionnel minimal qui envoie une requête POST à un serveur :
\n\n<?php\n// URL où envoyer les données\n$url = 'https://api.example.com/submit';\n\n// Données à envoyer (tableau associatif)\n$postData = [\n 'name' => 'Ivan Petrov',\n 'email' => 'ivan@example.com',\n 'message' => 'Bonjour de 2025 !'\n];\n\n// Initialisation de cURL\n$ch = curl_init($url);\n\n// Paramètres de la requête\ncurl_setopt_array($ch, [\n CURLOPT_POST => true, // C'est une requête POST\n CURLOPT_POSTFIELDS => http_build_query($postData), // Données au format chaîne\n CURLOPT_RETURNTRANSFER => true, // Retourner la réponse sous forme de chaîne\n CURLOPT_HEADER => false, // Ne pas retourner les en-têtes\n CURLOPT_TIMEOUT => 30, // Délai d'attente de 30 secondes\n CURLOPT_SSL_VERIFYPEER => true, // Vérifier le certificat SSL\n]);\n\n// Exécuter la requête\n$response = curl_exec($ch);\n\n// Vérification des erreurs\nif (curl_errno($ch)) {\n echo 'Erreur cURL : ' . curl_error($ch);\n} else {\n $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n echo "Code de réponse HTTP : $httpCode\\n";\n echo "Corps de la réponse : $response";\n}\n\n// Fermer la connexion\ncurl_close($ch);\n?>\n\nRemarquez l'utilisation de http_build_query(). C'est une fonction pratique qui transforme un tableau en chaîne encodée URL. Sans elle, cURL pourrait mal traiter les données.
Envoi de JSON au lieu d'un formulaire
\n\nEn 2025, la plupart des API utilisent JSON plutôt que les formulaires POST classiques. Voici comment adapter notre exemple :
\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, // Envoyer le JSON brut\n CURLOPT_HTTPHEADER => [ // Important : spécifier les en-têtes\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