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



No desenvolvimento web moderno em PHP, praticamente nenhum projeto fica sem enviar requisições HTTP. Seja para integração com uma API externa, obtenção de dados de um servidor remoto, envio de formulários ou verificação de disponibilidade de recursos — saber trabalhar corretamente com clientes HTTP é uma habilidade obrigatória para qualquer desenvolvedor PHP.



Neste artigo, vamos analisar três formas principais de criar um cliente HTTP em PHP: as funções nativas file_get_contents e cURL, além da biblioteca popular Guzzle. Você aprenderá como enviar requisições GET e POST corretamente, tratar erros, trabalhar com cabeçalhos e timeouts. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.



1. A forma mais simples: file_get_contents



A maneira mais rápida de enviar uma requisição GET em PHP é usar a função file_get_contents() com a URL especificada. No entanto, este método tem limitações sérias.



Requisição GET simples



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


Adicionando cabeçalhos via stream context



Para adicionar cabeçalhos ou alterar o método da requisição, é necessário usar stream_context_create():



<?php$url = 'https://api.example.com/data';$options = [    'http' => [        'method' => 'GET',        'header' => "Accept: application/json\\r" .                     "Authorization: Bearer your-token\\r"    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);if ($response === false) {    echo 'Erro na requisição';} else {    $data = json_decode($response, true);    print_r($data);}?>


Requisição POST via file_get_contents



<?php$url = 'https://api.example.com/create';$data = ['name' => 'John', 'email' => 'john@example.com'];$options = [    'http' => [        'method' => 'POST',        'header' => "Content-Type: application/json\\r",        'content' => json_encode($data)    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);?>


Desvantagens do file_get_contents:

  • Sem suporte a timeouts (por padrão, espera indefinidamente)
  • Difícil tratar erros de conexão
  • Não é possível baixar arquivos em partes
  • Não é adequado para cenários complexos


2. Ferramenta poderosa: cURL



cURL é a ferramenta padrão para trabalhar com HTTP em PHP. Ela fornece controle total sobre as requisições e suporta praticamente todos os recursos do protocolo.



Inicialização básica e requisição GET



<?php$ch = curl_init('https://api.example.com/users');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);if (curl_errno($ch)) {    echo 'cURL error: ' . 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 dados



<?php$ch = curl_init('https://api.example.com/users');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => json_encode([        'name' => 'Jane Doe',        'email' => 'jane@example.com'    ]),    CURLOPT_HTTPHEADER => [        'Content-Type: application/json',        'Accept: application/json'    ],    CURLOPT_TIMEOUT => 30,    CURLOPT_CONNECTTIMEOUT => 10]);$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);                

Blogs

Book Recommendations