Cliente HTTP em PHP: fazendo requisições corretamente de A a Z

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 preciso de um cliente HTTP em PHP?

\n\n

O desenvolvimento web moderno é impensável sem a interação com serviços externos. Seja enviando dados para uma API de terceiros, obtendo taxas de câmbio ou integrando com um gateway de pagamento — todo desenvolvedor PHP enfrenta a necessidade de executar requisições HTTP. Criar um cliente HTTP confiável em PHP é uma competência básica que permite que sua aplicação se comunique com o resto do mundo.

\n\n

Neste artigo, abordaremos duas abordagens principais: o uso da extensão nativa cURL e da biblioteca popular Guzzle. Você aprenderá como enviar corretamente requisições GET, POST, PUT e DELETE, tratar erros e trabalhar com cabeçalhos. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.

\n\n

1. Fundamentos do cliente HTTP em PHP: trabalhando com cURL

\n\n

1.1. O que é cURL e por que é importante

\n\n

cURL (Client URL Library) é uma poderosa extensão do PHP que permite interagir com diversos servidores usando os protocolos HTTP, HTTPS, FTP e outros. Ela faz parte da distribuição padrão do PHP, mas às vezes requer ativação separada no php.ini. O cURL oferece controle total sobre a requisição: você pode definir qualquer método, cabeçalhos, corpo da requisição e timeouts.

\n\n

1.2. Requisição GET simples com cURL

\n\n

Vamos começar com o cenário mais comum — obter dados de um servidor. Veja um exemplo de requisição à API pública JSONPlaceholder:

\n\n
<?php\n// Inicialização da sessão cURL\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n\n// Configuração das opções\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_HTTPGET, true);\ncurl_setopt($ch, CURLOPT_TIMEOUT, 30);\n\n// Execução da requisição\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n\n// Verificação de erros\nif (curl_errno($ch)) {\n    echo 'Erro cURL: ' . curl_error($ch);\n} else {\n    echo "Código HTTP: $httpCode\\n";\n    $data = json_decode($response, true);\n    print_r($data);\n}\n\n// Fechamento da sessão\ncurl_close($ch);\n?>
\n\n

Observe: sempre verificamos o código de resposta e a presença de erros. CURLOPT_RETURNTRANSFER garante que o resultado seja retornado em uma variável, e não exibido diretamente.

\n\n

1.3. Envio de requisição POST com dados

\n\n

Para enviar dados ao servidor (por exemplo, ao criar um novo registro), usamos o método POST. Os dados podem ser transmitidos como array ou string JSON:

\n\n
<?php\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts');\n\n$postData = [\n    'title' => 'Novo post',\n    'body' => 'Conteúdo do post',\n    'userId' => 1\n];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_POSTFIELDS => json_encode($postData), // JSON\n    CURLOPT_HTTPHEADER => [\n        'Content-Type: application/json',\n        'Accept: application/json'\n    ],\n    CURLOPT_TIMEOUT => 30\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\necho "Código HTTP: $httpCode\\n";\necho $response;\n?>
\n\n

Ponto-chave: se você passar um array em CURLOPT_POSTFIELDS, o PHP o codificará automaticamente como application/x-www-form-urlencoded. Para JSON, use json_encode() e especifique explicitamente o cabeçalho Content-Type.

\n\n

1.4. Requisições PUT e DELETE

\n\n

Para atualizar e excluir recursos, são usados os métodos PUT e DELETE. No cURL, eles são definidos através da opção CURLOPT_CUSTOMREQUEST:

\n\n
<?php\n// Requisição PUT (atualização)\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n$updateData = ['title' => 'Título atualizado'];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_CUSTOMREQUEST => 'PUT',\n    CURLOPT_POSTFIELDS => json_encode($updateData),\n    CURLOPT_HTTPHEADER =>                

Blogs

Book Recommendations