Comment envoyer une requête POST en PHP : 4 méthodes fonctionnelles avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment envoyer une requête POST en PHP : du débutant à l'expert



Avez-vous déjà été confronté à une situation où votre script PHP devait « parler » à un autre serveur ? Envoyer des données de formulaire, appeler une API externe ou simplement vérifier si un endpoint distant fonctionne ? Si oui, vous vous êtes sûrement demandé : « How do I send a POST request with PHP? ». C'est l'une des questions les plus populaires sur Stack Overflow, et pour cause — l'interaction entre serveurs est au cœur du web moderne.



Dans cet article, nous allons examiner quatre méthodes éprouvées pour envoyer une requête POST en PHP. Vous apprendrez comment le faire avec cURL, file_get_contents, stream_context_create et le puissant client HTTP Guzzle. Nous ne montrerons pas simplement du code — nous expliquerons quelle méthode choisir pour votre tâche et comment éviter les erreurs typiques.



C'est parti ! 🚀



Qu'est-ce qu'une requête POST et pourquoi en a-t-on besoin en PHP ?



POST est l'une des méthodes du protocole HTTP, conçue pour envoyer des données vers un serveur. Contrairement à GET, où les paramètres sont visibles dans l'URL, POST transmet les données dans le corps de la requête. C'est pratique quand on doit :



  • Envoyer un formulaire d'inscription ou de commande ;
  • Appeler une API REST (par exemple, créer un nouvel enregistrement dans un CRM) ;
  • Transférer un fichier vers un serveur distant ;
  • S'authentifier sur un service tiers.


PHP n'a pas de fonction intégrée « sendPostRequest() », mais il dispose de plusieurs outils flexibles qui permettent de le faire. Examinons chacun d'eux.



Méthode 1 : cURL — le couteau suisse



cURL (Client URL Library) est sans doute la méthode la plus populaire pour envoyer des requêtes HTTP en PHP. Il prend en charge une multitude de protocoles, sait gérer SSL, les cookies, les timeouts et les proxys. Si vous écrivez quelque chose de plus sérieux qu'un script d'apprentissage — regardez du côté de cURL.



Requête POST simple avec cURL



Voici un exemple de base qui envoie une requête POST au serveur de test JSONPlaceholder et affiche la réponse :



// 1. Créer une nouvelle ressource cURL$ch = curl_init();

// 2. Spécifier l'URL de l'endpointcurl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");

// 3. Indiquer qu'il s'agit d'une requête POSTcurl_setopt($ch, CURLOPT_POST, 1);

// 4. Transmettre les données (le tableau PHP est automatiquement converti en chaîne de requête)curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'title' => 'Mon premier post', 'body' => 'Ceci est le corps du post', 'userId' => 1]));

// 5. Retourner le résultat plutôt que de l'afficher directementcurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 6. Exécuter la requête$response = curl_exec($ch);

// 7. Vérifier les erreursif (curl_errno($ch)) { echo 'Erreur cURL : ' . curl_error($ch);} else { // 8. Fermer la connexion curl_close($ch); // 9. Afficher le résultat echo $response;}


POST avec JSON et en-têtes



Les API modernes fonctionnent le plus souvent avec JSON. Voici comment envoyer des données JSON et définir l'en-tête Content-Type approprié :



$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); // Obtenir le code HTTP de la réponse

curl_close($ch);

if ($httpCode === 200) { $result = json_decode($response, true); print_r($result);} else { echo "Erreur : HTTP $httpCode";}


Pourquoi cURL ? Il offre un contrôle total : vous pouvez configurer un timeout (CURLOPT_TIMEOUT), suivre les redirections (CURLOPT_FOLLOWLOCATION), envoyer un fichier (CURLFile) et même travailler avec FTP. Le seul inconvénient est que le code devient verbeux.



Méth

Blogs

Book Recommendations