Introduction : pourquoi un développeur PHP doit savoir envoyer des requêtes POST ?
\n\nImaginez la situation : vous développez un site en PHP et devez envoyer des données vers un autre serveur. Par exemple, inscrire un utilisateur via une API externe, soumettre un formulaire à un système CRM ou tester votre propre gestionnaire de requêtes POST. C'est une tâche classique que tout développeur web rencontre.
\n\nLa question "How do I send a POST request with PHP?" sur Stack Overflow a été vue des centaines de milliers de fois. Et ce n'est pas un hasard : bien que PHP soit un langage puissant, les débutants sont souvent perdus : quelle méthode choisir ? Est-ce vraiment si compliqué d'envoyer des données ?
\n\nNon, c'est possible. Et même de quatre manières différentes. Dans cet article, nous allons détailler chacune d'elles, montrer des exemples concrets de code PHP, comparer leurs performances et vous conseiller sur la méthode à utiliser selon votre cas. À la fin de cet article, vous enverrez des requêtes POST en toute confiance dans n'importe quel projet.
\n\nMéthode 1. La classique : cURL (la plus flexible et puissante)
\n\ncURL est une bibliothèque présente sur pratiquement tous les hébergements. Elle supporte HTTPS, les cookies, les en-têtes, les timeouts et bien plus encore. Si vous devez envoyer une requête POST avec un contrôle maximal, choisissez cURL.
\n\nExemple simple : envoi d'un formulaire avec les champs name et email
\n\n<?php\n$url = 'https://api.example.com/submit';\n$data = [\n 'name' => 'Jean Dupont',\n 'email' => 'jean@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// Pour envoyer du 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 "Succès ! Réponse du serveur : " . $response;\n} else {\n echo "Erreur. Code HTTP : " . $httpCode;\n}\n?>\n\nPoints importants avec cURL :
\n- \n
- http_build_query() — transforme un tableau en chaîne de type
name=Jean&email=jean@example.com. C'est le format standard pour les formulaires. \n - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) — pour que le résultat de la requête soit stocké dans une variable au lieu d'être affiché directement. \n
- Vérifiez toujours le code HTTP de la réponse (200 = succès, 4xx/5xx = erreur). \n
- Si le serveur attend du JSON : remplacez
http_build_queryparjson_encodeet ajoutez l'en-têteContent-Type: application/json. \n
Méthode 2. Rapide et simple : file_get_contents avec contexte
\n\nBeaucoup connaissent file_get_contents() comme fonction pour lire des fichiers. Mais peu savent qu'avec le Stream Context, elle peut envoyer des requêtes POST. C'est une excellente option pour les tâches simples sans avoir à inclure de bibliothèques externes.
Exemple d'envoi d'une requête POST avec file_get_contents
\n\n<?php\n$url = 'https://api.example.com/submit';\n$data = [\n 'name' => 'Jean Dupont',\n 'email' => 'jean@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 "Erreur lors de l'envoi de la requête";\n} else {\n echo "Réponse du serveur : " . $result;\n}\n?>\n\nQuand utiliser cette méthode ?
\n- \n
- Pour tester rapidement l'envoi de données. \n
- Quand vous ne voulez pas écrire beaucoup de code avec cURL. \n
- Inconvénient : la gestion des erreurs est limitée (pas d'accès direct au code HTTP). \n