✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Como usar o Guzzle – um cliente PHP HTTP para enviar solicitações HTTP

523

O desenvolvedor sempre se depara com uma tarefa em que precisa enviar solicitações HTTP para outros recursos e lidar com a resposta. A maneira mais comum de realizar essas tarefas é usando um cURL. No entanto, usar o cURL não é relativamente fácil para um iniciante. Além disso, para escrever um script em cURL, seu servidor deve ter habilitado a extensão cURL.

Guzzle é uma alternativa ao cURL. É um cliente PHP HTTP que facilita o envio de solicitações HTTP e facilita a integração com serviços da web. Mesmo, posso dizer por experiência própria, Guzzle é melhor do que cURL. É simples e fácil de usar. Se você estiver usando o Guzzle, não precisa ter a extensão cURL em seu servidor. Oferece uma melhor formatação de código em comparação com cURL.

Dito isso, vamos ver como usar o Guzzle em seu aplicativo.

Instalação

A maneira recomendada de instalar o Guzzle é por meio do Composer. Se você não instalou o Composer em seu sistema, pode obtê-lo aqui.

Como usar o Guzzle - um cliente PHP HTTP para enviar solicitações HTTP

Abra o terminal no diretório raiz do seu projeto e execute o comando abaixo para instalar o Guzzle.

composer require guzzlehttp/guzzle

O Guzzle fornece suporte para todas as solicitações HTTP que são GET, DELETE, HEAD, OPTIONS, PATCH, POST e PUT. Neste tutorial, estudamos como usar o Guzzle para enviar solicitações HTTP e lidar com as respostas com ele.

Como exemplo, tomo o serviço REQ | RES, que fornece uma API real falsa para testar solicitações HTTP.

Como enviar uma solicitação HTTP usando o Guzzle

Após a instalação da biblioteca Guzzle, você precisa incluir um ambiente Guzzle em seu arquivo da seguinte maneira.

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

Agora vamos tentar algumas operações, uma a uma, como GET, POST, upload de arquivo, copiar arquivo de URL remota para um diretório local, PUT, PATCH e DELETE.

Solicitação GET usando Guzzle

Se você olhar o site REQ | RES, eles forneceram alguns endpoints para solicitações ‘GET’. Vou pegar o exemplo de ponto de extremidade ‘LISTAR USUÁRIOS’. Para obter a lista de usuários, eles pedem para enviar uma solicitação GET para este endpoint https://reqres.in/api/users?page=2.

No Guzzle, enviaremos este pedido GET da seguinte forma.

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

Primeiro extraí um ‘base_uri’ (URL comum) como https://reqres.in. Aqui, o endpoint final é ‘/ api / users’ e requer um parâmetro GET como ‘page’. No Guzzle, você pode enviar parâmetros GET usando o array ‘query’ conforme mostrado no código acima.

Solicitação POST usando Guzzle

Normalmente, existem 2 tipos de solicitações POST. Pode ser necessário POSTar parâmetros como solicitação POST ‘application / x-www-form-urlencoded’ ou fazer upload de dados codificados em JSON como um corpo da solicitação. Você pode postar dados codificados em JSON conforme mostrado abaixo.

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

No caso da solicitação POST ‘application / x-www-form-urlencoded’, você pode POSTar os parâmetros da seguinte maneira.

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

Em alguns casos, os endpoints da API pedem que você envie um token de autorização em cada solicitação HTTP. O usuário pode enviar este token como cabeçalhos em sua solicitação Guzzle.

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

Copiar arquivo do servidor remoto usando Guzzle

Se você deseja copiar um arquivo de um servidor remoto para o diretório local, o Guzzle será uma opção melhor. Digamos que você queira copiar esta imagem em https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg como ‘blog.jpg’ para seu diretório local. Vamos escrever o código para ele conforme mostrado abaixo.

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

Upload de arquivo usando Guzzle

Como todos sabemos, para enviar arquivos, precisamos definir o corpo da solicitação como um formulário ‘multipart / form-data’. O código básico no Guzzle para upload de arquivos seria escrito como abaixo.

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

Para demonstrar o upload do arquivo, pegarei um exemplo ao vivo da API reSmush.it que envia uma versão otimizada da imagem em resposta. Você precisa POSTAR sua imagem em seu endpoint. O código para ele usando Guzzle da seguinte maneira.

<?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 Request using Guzzle

As solicitações PUT e PATCH são usadas para atualizar os recursos. No entanto, essas 2 solicitações fazem isso de maneira diferente.

PUT sobrescreve toda a entidade, se ela já existir, e cria um novo recurso, se ainda não existir. Se você deseja atualizar o nome de uma pessoa, você precisa enviar todo o recurso ao fazer uma solicitação 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);

A solicitação PATCH aplica uma atualização parcial ao recurso. Isso significa que você só precisa enviar os dados que deseja atualizar e não afetará ou alterará mais nada. Portanto, se você deseja atualizar o nome de uma pessoa, será necessário apenas enviar o parâmetro 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);

Uma solicitação DELETE é direta. Você só precisa atingir o ponto de extremidade da seguinte maneira.

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

Espero que você conheça o Guzzle e os princípios básicos de como usá-lo. Você pode ler mais sobre Guzzle Request Options em sua documentação. Por favor, compartilhe suas idéias ou sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação