✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come utilizzare Guzzle: un client HTTP PHP per l’invio di richieste HTTP

137

Lo sviluppatore si imbatte sempre in un’attività in cui deve inviare richieste HTTP ad altre risorse e gestire la risposta. Il modo più diffuso per eseguire queste attività è utilizzare un cURL. Tuttavia, l’utilizzo del cURL non è relativamente facile per un principiante. Inoltre, per scrivere uno script in cURL, il tuo server dovrebbe aver abilitato l’estensione cURL.

Guzzle è un’alternativa a cURL. È un client HTTP PHP che semplifica l’invio di richieste HTTP e banale l’integrazione con i servizi web. Anche, posso dire dalla mia esperienza che Guzzle è meglio di cURL. È semplice e facile da usare. Se stai usando Guzzle, non hai bisogno di avere l’estensione cURL sul tuo server. Ti offre una migliore formattazione del codice rispetto a cURL.

Detto questo, vediamo come utilizzare Guzzle nella tua applicazione.

Installazione

Il modo consigliato per installare Guzzle è attraverso il Composer. Se non hai installato Composer sul tuo sistema, puoi scaricarlo da qui.

Come utilizzare Guzzle: un client HTTP PHP per l'invio di richieste HTTP

Apri il terminale nella directory principale del tuo progetto ed esegui il comando seguente per installare Guzzle.

composer require guzzlehttp/guzzle

Guzzle fornisce supporto per tutte le richieste HTTP che sono GET, DELETE, HEAD, OPTIONS, PATCH, POST e PUT. In questo tutorial, studiamo come utilizzare Guzzle per inviare richieste HTTP e gestire le risposte con esso.

Ad esempio, prendo il servizio REQ|RES che fornisce una falsa API reale per testare le richieste HTTP.

Come inviare una richiesta HTTP utilizzando Guzzle

Al momento dell’installazione della libreria Guzzle, è necessario includere un ambiente Guzzle nel file come segue.

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

Ora proviamo alcune operazioni una per una come GET, POST, Caricamento file, copia file dall’URL remoto a una directory locale, PUT, PATCH e DELETE.

OTTIENI la richiesta usando Guzzle

Se guardi il sito web REQ|RES, hanno fornito alcuni endpoint per le richieste "GET". Prenderò l’esempio dell’endpoint ‘LIST USERS’. Per ottenere l’elenco degli utenti, chiedono di inviare una richiesta GET a questo endpoint https://reqres.in/api/users?page=2.

In Guzzle, invieremo questa richiesta GET come segue.

<?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);

Per prima cosa ho estratto un "base_uri" (URL comune) come https://reqres.in. Qui, l’endpoint finale è "/api/users" e richiede un parametro GET come "pagina". In Guzzle, puoi inviare i parametri GET usando l’array ‘query’ come mostrato nel codice sopra.

POST Richiesta utilizzando Guzzle

Normalmente, ci sono 2 tipi di richieste POST. Potrebbe essere necessario eseguire il POST dei parametri come richiesta POST "application/x-www-form-urlencoded" o caricare i dati codificati JSON come corpo della richiesta. Puoi pubblicare dati codificati JSON come mostrato di seguito.

<?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);

Nel caso della richiesta POST "application/x-www-form-urlencoded", è possibile eseguire il POST dei parametri come segue.

<?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!']
   ]
]);

In alcuni casi, gli endpoint API ti chiedono di inviare il token di autorizzazione in ogni richiesta HTTP. L’utente può inviare questo token come intestazioni nella tua richiesta Guzzle.

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

Copia file da server remoto usando Guzzle

Se stai cercando di copiare un file da un server remoto alla tua directory locale, Guzzle sarà un’opzione migliore. Supponiamo che tu voglia copiare questa immagine su https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg come "blog.jpg" nella tua directory locale. Scriveremo il codice per esso come mostrato di seguito.

<?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);

Caricamento di file utilizzando Guzzle

Come tutti sappiamo, per caricare i file dobbiamo impostare il corpo della richiesta su un modulo ‘multipart/form-data’. Il codice di base in Guzzle per caricare i file sarebbe scritto come di seguito.

<?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'
        ],
    ]
]);

Per dimostrare il caricamento del file, prenderò un esempio dal vivo dell’API di reSmush.it che invia una versione ottimizzata dell’immagine in risposta. Devi POSTARE la tua immagine al loro endpoint. Il codice per questo usando Guzzle come segue.

<?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();
}

PUT, PATCH e DELETE Richiesta utilizzando Guzzle

Le richieste PUT e PATCH vengono utilizzate per aggiornare le risorse. Tuttavia, queste 2 richieste lo fanno in modo diverso.

PUT sovrascrive l’intera entità se esiste già e crea una nuova risorsa se non esiste. Se vuoi aggiornare il nome di una persona, devi inviare l’intera risorsa quando fai una richiesta 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 richiesta PATCH applica un aggiornamento parziale alla risorsa. Significa che devi solo inviare i dati che desideri aggiornare e questo non influenzerà o cambierà nient’altro. Quindi, se vuoi aggiornare il nome di una persona, ti verrà richiesto solo di inviare il parametro 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);

Una richiesta DELETE è semplice. Hai solo bisogno di colpire l’endpoint come segue.

<?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

Spero che tu abbia avuto modo di conoscere Guzzle e le basi su come usarlo. Puoi leggere di più sulle opzioni di richiesta Guzzle nella loro documentazione. Si prega di condividere i tuoi pensieri o suggerimenti nella sezione commenti qui sotto.

articoli Correlati

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More