Introdução: por que um desenvolvedor PHP precisa saber enviar requisições POST?
\n\nImagine a seguinte situação: você está desenvolvendo um site em PHP e precisa enviar dados para outro servidor. Por exemplo, cadastrar um usuário através de uma API externa, enviar um formulário para um sistema de CRM ou testar seu próprio manipulador de requisições POST. Essa é uma tarefa clássica que todo desenvolvedor web enfrenta.
\n\nA pergunta "How do I send a POST request with PHP?" no Stack Overflow já acumulou centenas de milhares de visualizações. E não é por acaso: embora o PHP seja uma linguagem poderosa, iniciantes frequentemente ficam confusos: qual método escolher? Não é possível simplesmente enviar os dados?
\n\nÉ possível sim. E até de quatro maneiras diferentes. Neste artigo, vamos analisar cada uma delas, mostrar exemplos reais de código em PHP, comparar o desempenho e indicar quando usar cada método. Ao final do artigo, você se sentirá confiante para enviar requisições POST em qualquer projeto.
\n\nMétodo 1. O clássico: cURL (o mais flexível e poderoso)
\n\ncURL é uma biblioteca presente em praticamente todas as hospedagens. Ela suporta HTTPS, cookies, cabeçalhos, timeouts e muito mais. Se você precisa enviar uma requisição POST com o máximo de controle, escolha cURL.
\n\nExemplo simples: envio de formulário com campos name e email
\n\n<?php\n$url = 'https://api.exemplo.com/enviar';\n$data = [\n 'name' => 'João Silva',\n 'email' => 'joao@exemplo.com'\n];\n\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));\n// Se precisar enviar JSON:\n// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n// curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\nif ($httpCode === 200) {\n echo "Sucesso! Resposta do servidor: " . $response;\n} else {\n echo "Erro. Código HTTP: " . $httpCode;\n}\n?>\n\nDetalhes importantes do cURL:
\n- \n
- http_build_query() — transforma um array em uma string no formato
name=João&email=joao@exemplo.com. Este é o formato padrão para formulários. \n - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) — faz com que o resultado da requisição seja armazenado em uma variável, em vez de ser exibido diretamente. \n
- Sempre verifique o código HTTP de resposta (200 = sucesso, 4xx/5xx = erro). \n
- Se o servidor exigir JSON: substitua
http_build_queryporjson_encodee adicione o cabeçalhoContent-Type: application/json. \n
Método 2. Rápido e simples: file_get_contents com contexto
\n\nMuitos conhecem file_get_contents() como uma função para ler arquivos. Mas poucos sabem que, com o Stream Context, ela também pode enviar requisições POST. É uma ótima opção para tarefas simples, sem precisar de bibliotecas externas.
Exemplo de envio de requisição POST com file_get_contents
\n\n<?php\n$url = 'https://api.exemplo.com/enviar';\n$data = [\n 'name' => 'João Silva',\n 'email' => 'joao@exemplo.com'\n];\n\n$options = [\n 'http' => [\n 'header' => "Content-Type: application/x-www-form-urlencoded\\r\\n",\n 'method' => 'POST',\n 'content' => http_build_query($data)\n ]\n];\n$context = stream_context_create($options);\n$result = file_get_contents($url, false, $context);\n\nif ($result === false) {\n echo "Erro ao enviar a requisição";\n} else {\n echo "Resposta do servidor: " . $result;\n}\n?>\n\nQuando usar este método?
\n- \n
- Quando você precisa testar rapidamente o envio de dados. \n
- Quando não quer escrever muito código com cURL. \n
- Desvantagem: difícil de tratar erros (sem acesso direto ao código HTTP). \n