Cliente HTTP para PHP: principais bibliotecas para trabalhar com requisições
O desenvolvimento moderno em PHP raramente dispensa o envio de requisições HTTP: integração com APIs externas, parsing de páginas web, verificação de disponibilidade de serviços. As ferramentas nativas do PHP (como file_get_contents() ou cURL) muitas vezes não são suficientemente flexíveis ou convenientes. Felizmente, o ecossistema PHP oferece bibliotecas cliente poderosas que simplificam o trabalho com HTTP. Neste artigo, vamos analisar as principais bibliotecas de cliente HTTP para PHP, suas características e exemplos de uso.
1. Guzzle — o padrão de facto
Guzzle é a biblioteca mais popular para trabalhar com HTTP em PHP. Ela está instalada em milhões de projetos, incluindo Laravel, Drupal e Symfony. Guzzle fornece uma interface orientada a objetos limpa, suporta requisições assíncronas, middleware, pools de conexão e PSR-18 (HTTP Client).
Instalação
composer require guzzlehttp/guzzleExemplo: requisição GET com tratamento da resposta
<?phprequire 'vendor/autoload.php';
use GuzzleHttp\\Client;
$client = new Client([ 'base_uri' => 'https://api.github.com/', 'timeout' => 5.0,]);
$response = $client->request('GET', 'users/octocat');
echo $response->getStatusCode(); // 200$body = json_decode($response->getBody(), true);echo $body['login']; // octocat?>Requisição assíncrona
<?php$promise = $client->getAsync('https://httpbin.org/delay/1');$promise->then( function ($response) { echo 'Pronto: ' . $response->getStatusCode(); }, function ($exception) { echo 'Erro: ' . $exception->getMessage(); });$promise->wait(); // obrigatório chamar para executar?>Vantagens: comunidade enorme, flexibilidade, middleware para logging/caching, suporte completo a PSR-7/PSR-18.
2. Symfony HttpClient — rápido e moderno
O componente Symfony HttpClient surgiu no Symfony 4.4 e rapidamente ganhou popularidade devido ao alto desempenho, suporte nativo a multiplexação (HTTP/2) e excelente integração com Symfony. Ele também é compatível com PSR-18.
Instalação
composer require symfony/http-clientExemplo: requisições paralelas
<?phprequire 'vendor/autoload.php';
use Symfony\\Component\\HttpClient\\HttpClient;
$client = HttpClient::create();
$responses = [];$urls = [ 'https://api.github.com/users/octocat', 'https://api.github.com/users/nonexistent',];
foreach ($urls as $url) { $responses[] = $client->request('GET', $url);}
foreach ($responses as $response) { // O método getContent() aguarda automaticamente a resposta echo $response->getStatusCode() . ' - ' . $response->getContent(false) . "";}?>Uso avançado: retry e caching
<?phpuse Symfony\\Component\\HttpClient\\RetryableHttpClient;use Symfony\\Component\\HttpClient\\HttpClient;
$client = new RetryableHttpClient( HttpClient::create(['timeout' => 2.0]), maxRetries: 3);
$response = $client->request('GET', 'https://example.com');echo $response->getContent();?>Vantagens: alta velocidade, mecanismo de retry embutido, suporte a HTTP/2 push, baixo consumo de memória.
3. cURL (extensão do PHP) — clássico
A extensão cURL é uma solução nativa do PHP que trabalha diretamente com libcurl. Ela não requer instalação de bibliotecas de terceiros, mas o código acaba sendo de nível mais baixo. É adequada para tarefas simples ou quando não é possível usar o Composer.
Exemplo: requisição POST simples
<?php$ch = curl_init('https://httpbin.org/post');curl_setopt_array($ch, [ CURLOP
``` Também na biblioteca
Tokens JWT em Go (Golang): criação e verificação com exemplos
ORM para Go (Golang): comparação e exemplos de bibliotecas populares
cobra/pflag para Go: guia completo com exemplos práticos