Client HTTP en PHP : faire des requêtes correctement (niveau avancé)

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 : du simple au complexe



La plupart des développeurs PHP connaissent les requêtes HTTP de base via file_get_contents() ou un simple curl_init(). Cependant, lorsqu'un projet passe du stade de "projet personnel" à un système de production, le besoin d'outils plus fiables, flexibles et performants se fait sentir. Un client HTTP avancé en PHP ne se limite pas à l'envoi d'une requête GET. Il s'agit de gérer un pool de connexions, un traitement asynchrone, des tentatives de réessai en cas d'erreur, un réglage fin des timeouts et des middleware pour la journalisation.



Dans cet article, nous allons voir comment construire un client HTTP correct en PHP de niveau avancé. Vous apprendrez à utiliser la bibliothèque Guzzle, à travailler avec des requêtes asynchrones, à gérer les exceptions et à créer des intégrations fiables avec des API externes. Ce contenu est destiné aux développeurs qui connaissent déjà les bases de PHP et souhaitent améliorer la qualité de leur code.



1. Guzzle : le standard de facto pour les requêtes HTTP en PHP



Si vous écrivez une application sérieuse en PHP, la bibliothèque Guzzle (guzzlehttp/guzzle) devrait devenir votre outil principal. Elle abstrait le travail avec cURL et les flux PHP, offrant une interface unifiée et pratique.



1.1 Installation et requête de base



Installation via Composer :



composer require guzzlehttp/guzzle


Exemple d'une requête GET simple avec indication des en-têtes et du timeout :



<?phprequire 'vendor/autoload.php';

use GuzzleHttp\\Client;use GuzzleHttp\\Exception\\RequestException;

$client = new Client([ 'base_uri' => 'https://api.example.com/', 'timeout' => 5.0, // Timeout en secondes 'headers' => [ 'User-Agent' => 'MyApp/1.0', 'Accept' => 'application/json', ]]);

try { $response = $client->get('/users', [ 'query' => ['limit' => 10, 'offset' => 0] ]); $body = $response->getBody()->getContents(); $data = json_decode($body, true); echo "Statut : " . $response->getStatusCode() . ""; print_r($data);} catch (RequestException $e) { echo "Erreur de requête : " . $e->getMessage(); if ($e->hasResponse()) { echo "Réponse du serveur : " . $e->getResponse()->getBody(); }}


1.2 Configuration avancée du client



Le niveau avancé implique un réglage fin. Examinons les paramètres de configuration clés :



  • connect_timeout — temps d'attente pour l'établissement de la connexion (séparé du timeout de transfert de données).
  • allow_redirects — gestion des redirections (peut être désactivé ou limité en nombre).
  • verify — désactivation de la vérification du certificat SSL (uniquement pour l'environnement de test !).
  • http_errors — si défini sur false, Guzzle ne lèvera pas d'exceptions pour les codes 4xx et 5xx, permettant de les traiter manuellement.
  • handler — gestionnaire personnalisé pour les tests (MockHandler).


Exemple d'un client avec une configuration avancée :



$client = new Client([    'base_uri'        => 'https://api.example.com/',    'timeout'         => 10.0,    'connect_timeout' => 3.0,    'allow_redirects' => [        'max' => 5,        'strict' => true,        'referer' => true,        'protocols' => ['https']    ],    'http_errors'     => false,    'headers'         => [        'Authorization' => 'Bearer ' . $token,        'Content-Type'  => 'application/json',    ]]);


2. Requêtes asynchrones et concurrence



Dans les applications réelles, il est souvent nécessaire d'exécuter plusieurs requêtes simultanément (par exemple, charger des données depuis plusieurs points de terminaison). Guzzle fournit un mécanisme puissant de requêtes asynchrones basé sur les Promises (sa propre réa

Blogs

Book Recommendations