Cliente HTTP em PHP: fazendo requisições corretamente

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que você precisa de um cliente HTTP em PHP?

As aplicações web modernas raramente existem isoladamente. Elas interagem com APIs externas, serviços de arquitetura de microsserviços, sistemas de análise e gateways de pagamento. No centro dessa interação está o protocolo HTTP. Para o desenvolvedor PHP, saber como enviar requisições HTTP corretamente não é apenas uma habilidade útil, mas uma parte obrigatória do kit de ferramentas profissional.

Neste artigo, vamos analisar três maneiras principais de criar um cliente HTTP em PHP: desde o simples file_get_contents() até o poderoso cURL e o moderno pacote Guzzle. Você aprenderá como escolher a ferramenta adequada, tratar erros, trabalhar com cabeçalhos e garantir a segurança das requisições.



1. Requisições simples com file_get_contents()

A maneira mais simples de enviar uma requisição GET em PHP é usar a função embutida file_get_contents(). Este método é adequado para protótipos rápidos e cenários simples, onde não é necessário um ajuste fino da conexão.



Requisição GET básica

<?php$url = 'https://api.example.com/data';$response = file_get_contents($url);if ($response === false) {    echo 'Erro ao obter dados';} else {    echo $response;}?>


Configuração de contexto de stream

Para gerenciar cabeçalhos e o método da requisição, use stream_context_create(). Isso permite enviar requisições POST e definir cabeçalhos personalizados.

<?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) {    // Tratamento de erro}?>

Desvantagens: file_get_contents() não suporta cookies, timeouts em nível de conexão, tratamento de redirecionamentos e trabalho com certificados SSL. Para projetos sérios, é melhor usar cURL ou Guzzle.



2. cURL poderoso e flexível

A extensão cURL (Client URL Library) é a ferramenta padrão para trabalhar com HTTP em PHP. Ela fornece controle total sobre a requisição: cabeçalhos, corpo, timeouts, autenticação, trabalho com arquivos e muito mais.



Requisição GET básica com 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 'Erro cURL: ' . curl_error($ch);} else {    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);    echo "Código HTTP: $httpCode";    echo $response;}curl_close($ch);?>


Requisição POST com JSON e cabeçalhos

<?php$postData = ['title' => 'PHP HTTP Client', 'body' => 'Exemplo de requisição'];$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 // Em produção, sempre 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 "Erro: HTTP $httpCode";}?>


Opções úteis do cURL

  • CURLOPT_

Blogs

Book Recommendations