Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment utiliser Guzzle – Un client HTTP PHP pour envoyer des requêtes HTTP

938

Le développeur rencontre toujours une tâche pour laquelle il doit envoyer des requêtes HTTP à d’autres ressources et gérer la réponse. La façon la plus courante d’effectuer ces tâches consiste à utiliser un cURL. Cependant, utiliser le cURL n’est pas relativement facile pour un débutant. Aussi pour écrire un script en cURL, votre serveur doit avoir activé l’extension cURL.

Guzzle est une alternative à cURL. C’est un client PHP HTTP qui facilite l’envoi de requêtes HTTP et l’intégration aux services Web. Même, d’après mon expérience, je peux dire que Guzzle est meilleur que cURL. C’est simple et facile à utiliser. Si vous utilisez Guzzle, vous n’avez pas besoin d’avoir l’extension cURL sur votre serveur. Il vous donne un meilleur formatage du code par rapport à cURL.

Cela étant dit, voyons comment utiliser Guzzle dans votre application.

Installation

La méthode recommandée pour installer Guzzle consiste à utiliser Composer. Si vous n’avez pas installé Composer sur votre système, vous pouvez l’obtenir ici.

Comment utiliser Guzzle - Un client HTTP PHP pour envoyer des requêtes HTTP

Ouvrez le terminal dans le répertoire racine de votre projet et exécutez la commande ci-dessous pour installer Guzzle.

composer require guzzlehttp/guzzle

Guzzle prend en charge toutes les requêtes HTTP qui sont GET, DELETE, HEAD, OPTIONS, PATCH, POST et PUT. Dans ce tutoriel, nous étudions comment utiliser Guzzle pour envoyer des requêtes HTTP et gérer les réponses avec.

À titre d’exemple, je prends le service REQ|RES qui fournit une fausse vraie API pour tester les requêtes HTTP.

Comment envoyer une requête HTTP à l’aide de Guzzle

Lors de l’installation de la bibliothèque Guzzle, vous devez inclure un environnement Guzzle dans votre fichier comme suit.

<?php
require_once "vendor/autoload.php";
 
use GuzzleHttpClient;

Essayons maintenant quelques opérations une par une telles que GET, POST, Téléchargement de fichier, copie de fichier d’une URL distante vers un répertoire local, PUT, PATCH et DELETE.

GET Requête en utilisant Guzzle

Si vous regardez le site Web de REQ|RES, ils ont fourni quelques points de terminaison pour les demandes « GET ». Je vais prendre l’exemple du point de terminaison ‘LIST USERS’. Pour obtenir la liste des utilisateurs, ils demandent d’envoyer une requête GET à ce point de terminaison https://reqres.in/api/users?page=2.

Dans Guzzle, nous enverrons cette requête GET comme suit.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('GET', '/api/users', [
    'query' => [
        'page' => '2',
    ]
]);
 
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

J’ai d’abord extrait une ‘base_uri’ (URL commune) en tant que https://reqres.in. Ici, le point de terminaison final est ‘/api/users’ et il nécessite un paramètre GET comme ‘page’. Dans Guzzle, vous pouvez envoyer des paramètres GET en utilisant le tableau ‘query’ comme indiqué dans le code ci-dessus.

Demande POST à ​​l’aide de Guzzle

Normalement, il existe 2 types de requêtes POST. Vous devrez peut-être envoyer les paramètres en tant que demande POST ‘application/x-www-form-urlencoded’ ou télécharger des données encodées JSON en tant que corps de la demande. Vous pouvez publier des données encodées JSON comme indiqué ci-dessous.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
 
$response = $client->request('POST', '/api/users', [
    'json' => [
        'name' => 'Sam',
        'job' => 'Developer'
    ]
]);
 
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

Dans le cas de la requête POST ‘application/x-www-form-urlencoded’, vous pouvez POST les paramètres comme suit.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'BASE_URL_ENDPOINT',
]);
 
$client->request('POST', '/endpoint_here', [
   'form_params' => [
       'foo' => 'bar',
       'baz' => ['hi', 'there!']
   ]
]);

Dans certains cas, les points de terminaison d’API vous demandent d’envoyer un jeton d’autorisation dans chaque requête HTTP. L’utilisateur peut envoyer ce jeton sous forme d’en-têtes dans votre demande Guzzle.

<?php
$client->request('POST', '/endpoint_here', [
    "headers" => [
        "Authorization" => "Bearer TOKEN_VALUE"
    ],
    'form_params' => [
       'foo' => 'bar',
       'baz' => ['hi', 'there!']
    ]
]);

Copier le fichier du serveur distant à l’aide de Guzzle

Si vous cherchez à copier un fichier d’un serveur distant vers votre répertoire local, Guzzle sera une meilleure option. Supposons que vous souhaitiez copier cette image à l’ adresse https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg en tant que « blog.jpg » dans votre répertoire local. Nous allons écrire le code pour cela comme indiqué ci-dessous.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$fp = fopen('blog.jpg', 'wb');
 
$client = new GuzzleHttpClient();
$request = $client->get('https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg', ['sink' => $fp]);
 
fclose($fp);

Téléchargement de fichiers avec Guzzle

Comme nous le savons tous, pour télécharger des fichiers, nous devons définir le corps de la demande sur un formulaire « multipart/form-data ». Le code de base dans Guzzle pour le téléchargement de fichiers serait écrit comme ci-dessous.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'BASE_URL_HERE',
]);
 
$client->request('POST', '/endpoint_here', [
    'multipart' => [
        [
            'name'     => 'files', // name value requires by endpoint
            'contents' => fopen('/path/to/file', 'r'),
            'filename' => 'custom_image.jpg'
        ],
    ]
]);

Pour démontrer le téléchargement de fichier, je vais prendre un exemple en direct de l’ API reSmush.it qui envoie une version optimisée de l’image en réponse. Vous devez POSTER votre image à leur point de terminaison. Le code pour cela en utilisant Guzzle comme suit.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
try {
    $client = new Client([
        // Base URI is used with relative requests
        'base_uri' => 'http://api.resmush.it',
    ]);
 
    $response = $client->request('POST', "?qlty=92", [
        'multipart' => [
            [
                'name'     => 'files', // name value requires by endpoint
                'contents' => fopen(getcwd().'/blog.jpg', 'r'),
                'filename' => 'blog.jpg',
                'headers'  => array('Content-Type' => mime_content_type(getcwd().'/blog.jpg'))
            ]
        ]
    ]);
 
    if (200 == $response->getStatusCode()) {
        $response = $response->getBody();
        $arr_result = json_decode($response);
        print_r($arr_result);
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

Requête PUT, PATCH et DELETE avec Guzzle

Les requêtes PUT et PATCH sont utilisées pour mettre à jour les ressources. Cependant, ces 2 requêtes le font différemment.

PUT écrase toute l’entité si elle existe déjà et crée une nouvelle ressource si elle n’existe pas. Si vous souhaitez mettre à jour le nom d’une personne, vous devez envoyer l’intégralité de la ressource lors d’une requête PUT.

<?php
<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
  
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('PUT', '/api/users/2', [
    'json' => [
        'name' => 'Sam',
        'job' => 'Developer'
    ]
]);
  
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

La demande PATCH applique une mise à jour partielle à la ressource. Cela signifie que vous n’êtes tenu d’envoyer que les données que vous souhaitez mettre à jour, et cela n’affectera ni ne changera rien d’autre. Ainsi, si vous souhaitez mettre à jour le nom d’une personne, il vous suffira d’envoyer le paramètre name.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
  
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('PATCH', '/api/users/2', [
    'json' => [
        'name' => 'Sam',
    ]
]);
  
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

Une demande DELETE est simple. Il vous suffit d’atteindre le point de terminaison comme suit.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
  
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('DELETE', '/api/users/2');
  
echo $response->getStatusCode(); //should gives 204

J’espère que vous avez découvert Guzzle et les bases de son utilisation. Vous pouvez en savoir plus sur les options de demande de Guzzle dans leur documentation. S’il vous plaît partager vos pensées ou suggestions dans la section commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails