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 : pourquoi un client HTTP en PHP ?

Les applications web modernes existent rarement de manière isolée. Elles interagissent avec des API externes, des services d'architecture microservices, des systèmes d'analyse et des passerelles de paiement. Le protocole HTTP est au cœur de cette interaction. Pour un développeur PHP, savoir envoyer correctement des requêtes HTTP n'est pas seulement une compétence utile, mais une partie obligatoire de la boîte à outils professionnelle.

Dans cet article, nous allons examiner trois méthodes principales pour créer un client HTTP en PHP : du simple file_get_contents() au puissant cURL en passant par le package moderne Guzzle. Vous apprendrez à choisir l'outil approprié, à gérer les erreurs, à travailler avec les en-têtes et à assurer la sécurité des requêtes.



1. Requêtes simples avec file_get_contents()

La façon la plus simple d'envoyer une requête GET en PHP est d'utiliser la fonction intégrée file_get_contents(). Cette méthode convient pour les prototypes rapides et les scénarios simples où un réglage fin de la connexion n'est pas nécessaire.



Requête GET de base

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


Configuration du contexte de flux

Pour gérer les en-têtes et la méthode de requête, utilisez stream_context_create(). Cela permet d'envoyer des requêtes POST et de définir des en-têtes personnalisés.

<?php$data = json_encode(['name' => 'John', 'email' => 'john@example.com']);$options = [    'http' => [        'method' => 'POST',        'header' => "Content-Type: application/json\\r" .                     "Accept: application/json\\r",        'content' => $data    ]];$context = stream_context_create($options);$result = file_get_contents('https://api.example.com/users', false, $context);if ($result === false) {    // Gestion de l'erreur}?>

Inconvénients : file_get_contents() ne prend pas en charge les cookies, les timeouts au niveau de la connexion, la gestion des redirections et le travail avec les certificats SSL. Pour les projets sérieux, il est préférable d'utiliser cURL ou Guzzle.



2. cURL puissant et flexible

L'extension cURL (Client URL Library) est l'outil standard pour travailler avec HTTP en PHP. Elle offre un contrôle total sur la requête : en-têtes, corps, timeouts, authentification, gestion des fichiers et bien plus encore.



Requête GET de base avec cURL

<?php$ch = curl_init('https://api.example.com/data');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_TIMEOUT, 30);$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 JSON et en-têtes

<?php$postData = ['title' => 'PHP HTTP Client', 'body' => 'Exemple de requête'];$jsonData = json_encode($postData);$ch = curl_init('https://jsonplaceholder.typicode.com/posts');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => $jsonData,    CURLOPT_HTTPHEADER => [        'Content-Type: application/json',        'Accept: application/json',        'Authorization: Bearer YOUR_TOKEN_HERE'    ],    CURLOPT_TIMEOUT => 15,    CURLOPT_SSL_VERIFYPEER => true // En production, toujours true !]);$result = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);if ($httpCode >= 200 && $httpCode < 300) {    $decoded = json_decode($result, true);    print_r($decoded);} else {    echo "Erreur : HTTP $httpCode";}?>


Options utiles de cURL

  • CURLOPT_

Blogs

Book Recommendations