Requisições POST em PHP com cURL: guia 2025

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

PHP, cURL e HTTP POST: como enviar dados como um profissional em 2025

\n\n

Se você já escreveu código em PHP que precisava "conversar" com outro servidor — enviar um formulário, chamar uma API ou simplesmente transmitir dados — com certeza já usou cURL. Não é apenas uma biblioteca, é um canivete suíço para requisições HTTP. E embora em 2025 tenhamos ferramentas mais modernas como Guzzle ou Symfony HttpClient, o cURL continua sendo a base que todo desenvolvedor PHP precisa conhecer.

\n\n

A pergunta "PHP, cURL, and HTTP POST example?" no Stack Overflow tem milhares de visualizações. Por quê? Porque é aquela tarefa que aparece em praticamente todo projeto: desde integração com sistemas de pagamento até envio de dados para CRM. Vamos entender como fazer isso de forma correta, segura e elegante.

\n\n

O que é cURL e por que usá-lo em PHP?

\n\n

cURL (Client URL) é uma biblioteca poderosa que permite que seu script PHP atue como um cliente HTTP. Imagine que seu código é um navegador sem interface. Ele pode abrir páginas, enviar formulários, baixar arquivos e até trabalhar com cookies.

\n\n

Em 2025, o cURL continua relevante porque:

\n
    \n
  • Ele já vem embutido no PHP (não precisa instalar pacotes extras)
  • \n
  • Funciona mais rápido que algumas bibliotecas "pesadas"
  • \n
  • Dá controle total sobre cada aspecto da requisição
  • \n
  • Suporta todos os protocolos modernos: HTTP/2, HTTPS, FTP e até IMAP
  • \n
\n\n

Exemplo básico: enviando uma requisição POST com cURL

\n\n

Vamos começar com o clássico. Aqui está um código funcional mínimo que envia uma requisição POST para um servidor:

\n\n
<?php\n// URL para onde enviar os dados\n$url = 'https://api.exemplo.com/enviar';\n\n// Dados a serem enviados (array associativo)\n$postData = [\n    'nome' => 'João Silva',\n    'email' => 'joao@exemplo.com',\n    'mensagem' => 'Olá de 2025!'\n];\n\n// Inicializa o cURL\n$ch = curl_init($url);\n\n// Configurações da requisição\ncurl_setopt_array($ch, [\n    CURLOPT_POST => true,                          // É uma requisição POST\n    CURLOPT_POSTFIELDS => http_build_query($postData), // Dados em formato de string\n    CURLOPT_RETURNTRANSFER => true,                // Retorna a resposta como string\n    CURLOPT_HEADER => false,                       // Não retorna cabeçalhos\n    CURLOPT_TIMEOUT => 30,                         // Timeout de 30 segundos\n    CURLOPT_SSL_VERIFYPEER => true,                // Verifica certificado SSL\n]);\n\n// Executa a requisição\n$response = curl_exec($ch);\n\n// Verifica erros\nif (curl_errno($ch)) {\n    echo 'Erro cURL: ' . curl_error($ch);\n} else {\n    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n    echo "Código HTTP da resposta: $httpCode\\n";\n    echo "Corpo da resposta: $response";\n}\n\n// Fecha a conexão\ncurl_close($ch);\n?>
\n\n

Repare no uso de http_build_query(). Essa função prática transforma um array em uma string codificada para URL. Sem ela, o cURL pode processar os dados de forma incorreta.

\n\n

Enviando JSON em vez de formulário

\n\n

Em 2025, a maioria das APIs trabalha com JSON, e não com formulários POST tradicionais. Veja como adaptar nosso exemplo:

\n\n
<?php\n$url = 'https://api.exemplo.com/v2/usuarios';\n$jsonData = json_encode([\n    'usuario' => 'dev_2025',\n    'senha' => 'senha_secreta',\n    'cargo' => 'admin'\n]);\n\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_POST => true,\n    CURLOPT_POSTFIELDS => $jsonData,  // Envia JSON puro\n    CURLOPT_HTTPHEADER => [           // Importante: definir cabeçalhos\n        'Content-Type: application/json',\n        'Content-Length: ' . strlen($jsonData),\n        'Accept: application/json'\n    ],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 15,\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\nif ($http                

Blogs

Book Recommendations