Client HTTP en PHP : effectuer des requêtes correctement

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

Introduction



Dans le développement web moderne en PHP, pratiquement aucun projet ne se passe d'envoi de requêtes HTTP. Que ce soit pour l'intégration avec une API externe, la récupération de données depuis un serveur distant, l'envoi de formulaires ou la vérification de disponibilité des ressources — savoir travailler correctement avec des clients HTTP est une compétence obligatoire pour tout développeur PHP.



Dans cet article, nous allons analyser trois méthodes principales pour créer un client HTTP en PHP : les fonctions intégrées file_get_contents et cURL, ainsi que la bibliothèque populaire Guzzle. Vous apprendrez comment envoyer correctement des requêtes GET et POST, gérer les erreurs, travailler avec les en-têtes et les délais d'attente. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés souhaitant systématiser leurs connaissances.



1. La méthode la plus simple : file_get_contents



La façon la plus rapide d'envoyer une requête GET en PHP est d'utiliser la fonction file_get_contents() avec une URL. Cependant, cette méthode présente des limitations sérieuses.



Requête GET simple



<?php$url = 'https://api.example.com/users';$response = file_get_contents($url);if ($response === false) {    echo 'Erreur lors de la récupération des données';} else {    echo $response;}?>


Ajout d'en-têtes via stream context



Pour ajouter des en-têtes ou modifier la méthode de requête, il faut utiliser stream_context_create() :



<?php$url = 'https://api.example.com/data';$options = [    'http' => [        'method' => 'GET',        'header' => "Accept: application/json\\r" .                     "Authorization: Bearer your-token\\r"    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);if ($response === false) {    echo 'Erreur de requête';} else {    $data = json_decode($response, true);    print_r($data);}?>


Requête POST via file_get_contents



<?php$url = 'https://api.example.com/create';$data = ['name' => 'John', 'email' => 'john@example.com'];$options = [    'http' => [        'method' => 'POST',        'header' => "Content-Type: application/json\\r",        'content' => json_encode($data)    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);?>


Inconvénients de file_get_contents :

  • Pas de support des délais d'attente (attend indéfiniment par défaut)
  • Difficile de gérer les erreurs de connexion
  • Impossible de télécharger des fichiers par parties
  • Peu adapté aux scénarios complexes


2. Un outil puissant : cURL



cURL est l'outil standard pour travailler avec HTTP en PHP. Il offre un contrôle total sur les requêtes et supporte pratiquement toutes les fonctionnalités du protocole.



Initialisation de base et requête GET



<?php$ch = curl_init('https://api.example.com/users');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);if (curl_errno($ch)) {    echo 'Erreur cURL : ' . curl_error($ch);} else {    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);    echo "Code HTTP : $httpCode";    echo $response;}curl_close($ch);?>


Requête POST avec données



<?php$ch = curl_init('https://api.example.com/users');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => json_encode([        'name' => 'Jane Doe',        'email' => 'jane@example.com'    ]),    CURLOPT_HTTPHEADER => [        'Content-Type: application/json',        'Accept: application/json'    ],    CURLOPT_TIMEOUT => 30,    CURLOPT_CONNECTTIMEOUT => 10]);$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);

?>

Blogs

Book Recommendations