Introduction : pourquoi un client HTTP en PHP est-il nécessaire ?
\n\nLe développement web moderne est impensable sans interaction avec des services externes. Qu'il s'agisse d'envoyer des données à une API tierce, d'obtenir le taux de change ou d'intégrer une passerelle de paiement, chaque développeur PHP est confronté à la nécessité d'effectuer des requêtes HTTP. Créer un client HTTP fiable en PHP est une compétence de base qui permet à votre application de communiquer avec le reste du monde.
\n\nDans cet article, nous allons examiner deux approches principales : l'utilisation de l'extension intégrée cURL et de la bibliothèque populaire Guzzle. Vous apprendrez à envoyer correctement des requêtes GET, POST, PUT et DELETE, à gérer les erreurs et à travailler avec les en-têtes. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés souhaitant systématiser leurs connaissances.
\n\n1. Bases du client HTTP en PHP : travailler avec cURL
\n\n1.1. Qu'est-ce que cURL et pourquoi est-il important
\n\ncURL (Client URL Library) est une extension puissante de PHP qui permet d'interagir avec différents serveurs via les protocoles HTTP, HTTPS, FTP et autres. Elle est incluse dans la distribution standard de PHP, mais nécessite parfois une activation séparée dans php.ini. cURL offre un contrôle total sur la requête : vous pouvez définir n'importe quelle méthode, en-têtes, corps de requête et délais d'attente.
\n\n1.2. Requête GET simple avec cURL
\n\nCommençons par le scénario le plus courant : récupérer des données depuis un serveur. Voici un exemple de requête vers l'API publique JSONPlaceholder :
\n\n<?php\n// Initialisation de la session cURL\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n\n// Configuration des options\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_HTTPGET, true);\ncurl_setopt($ch, CURLOPT_TIMEOUT, 30);\n\n// Exécution de la requête\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n\n// Vérification des erreurs\nif (curl_errno($ch)) {\n echo 'Erreur cURL : ' . curl_error($ch);\n} else {\n echo "Code HTTP : $httpCode\\n";\n $data = json_decode($response, true);\n print_r($data);\n}\n\n// Fermeture de la session\ncurl_close($ch);\n?>\n\nNotez que nous vérifions toujours le code de réponse et la présence d'erreurs. CURLOPT_RETURNTRANSFER garantit que le résultat sera retourné dans une variable, et non affiché directement.
1.3. Envoi d'une requête POST avec des données
\n\nPour envoyer des données vers un serveur (par exemple, lors de la création d'un nouvel enregistrement), nous utilisons POST. Les données peuvent être transmises sous forme de tableau ou de chaîne JSON :
\n\n<?php\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts');\n\n$postData = [\n 'title' => 'Nouveau post',\n 'body' => 'Contenu du post',\n 'userId' => 1\n];\n\ncurl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_POSTFIELDS => json_encode($postData), // JSON\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n 'Accept: application/json'\n ],\n CURLOPT_TIMEOUT => 30\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\necho "Code HTTP : $httpCode\\n";\necho $response;\n?>\n\nPoint clé : si vous transmettez un tableau dans CURLOPT_POSTFIELDS, PHP l'encodera automatiquement en application/x-www-form-urlencoded. Pour JSON, vous devez utiliser json_encode() et spécifier explicitement l'en-tête Content-Type.
1.4. Requêtes PUT et DELETE
\n\nPour mettre à jour et supprimer des ressources, on utilise les méthodes PUT et DELETE. Dans cURL, elles sont définies via l'option CURLOPT_CUSTOMREQUEST :
<?php\n// Requête PUT (mise à jour)\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n$updateData = ['title' => 'Titre mis à jour'];\n\ncurl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_CUSTOMREQUEST => 'PUT',\n CURLOPT_POSTFIELDS => json_encode($updateData),\n CURLOPT_HTTPHEADER =>