Introduction : pourquoi un client HTTP en PHP ?
Dans le développement web moderne, les applications PHP existent rarement de manière isolée. Presque tous les projets interagissent avec des services externes : systèmes de paiement, API de réseaux sociaux, stockages cloud ou microservices personnalisés. Pour cela, un client HTTP en PHP fiable est nécessaire, permettant d'envoyer des requêtes, de traiter les réponses et de gérer les connexions.
Dans cet article, nous allons examiner toutes les méthodes pour créer un client HTTP en PHP : des fonctions intégrées les plus simples aux bibliothèques professionnelles. Vous apprendrez à gérer correctement les erreurs, à travailler avec les en-têtes et les délais d'attente, et vous obtiendrez des exemples de code prêts à l'emploi.
Ce contenu sera utile aussi bien aux débutants qui commencent tout juste à apprendre PHP qu'aux développeurs expérimentés souhaitant systématiser leurs connaissances.
1. Outils intégrés de PHP pour les requêtes HTTP
PHP fournit plusieurs outils intégrés pour travailler avec HTTP. Examinons les plus populaires.
1.1. file_get_contents() — une méthode simple
La méthode la plus simple pour envoyer une requête GET est d'utiliser la fonction file_get_contents(). Elle lit le contenu d'un fichier ou d'une URL dans une chaîne de caractères.
<?php$url = 'https://api.example.com/data';$response = file_get_contents($url);
if ($response === false) { echo 'Erreur lors de l\'exécution de la requête';} else { echo $response;}?>Avantages : code minimal, ne nécessite pas d'extensions supplémentaires.
Inconvénients : pas de support des requêtes POST, difficile de gérer les en-têtes, pas de gestion des délais d'attente, peu adapté à la production.
1.2. stream_context_create() — configuration du contexte
Pour un travail plus flexible, utilisez stream_context_create(). Cette méthode permet de définir la méthode de requête, les en-têtes et le corps de la requête.
<?php$data = json_encode(['name' => 'John', 'age' => 30]);
$options = [ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: application/json\\r" . "Content-Length: " . strlen($data) . "\\r", 'content' => $data, 'timeout' => 10 ]];
$context = stream_context_create($options);$response = file_get_contents('https://api.example.com/users', false, $context);
if ($response === false) { echo 'Erreur de requête';} else { $result = json_decode($response, true); print_r($result);}?>Cette approche est déjà meilleure, mais elle présente encore des limitations en termes de fonctionnalités et de performances.
2. cURL — un client HTTP puissant en PHP
cURL (Client URL Library) est un outil standard pour travailler avec HTTP en PHP. Il offre un contrôle maximal sur les requêtes et est supporté sur pratiquement tous les hébergements.
2.1. Envoi de base d'une requête GET
<?php$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'https://api.example.com/users');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) { echo 'Erreur cURL : ' . curl_error($ch);} else { echo "Code HTTP : $httpCode"; echo $response;}
curl_close($ch);?>2.2. Requête POST avec données
<?php$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'https://api.example.com/users');curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['name' => 'Alice', 'email' => 'alice@example.com']));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer your_token_here']);
$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($c