Cómo enviar una solicitud POST en PHP: 4 formas funcionales con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo enviar una solicitud POST en PHP: de principiante a profesional



¿Alguna vez te has encontrado en una situación en la que tu script PHP necesita «hablar» con otro servidor? ¿Enviar datos de un formulario, llamar a una API externa o simplemente verificar si un endpoint remoto funciona? Si es así, seguramente te has preguntado: «How do I send a POST request with PHP?». Esta es una de las preguntas más populares en Stack Overflow, y con razón: la interacción entre servidores es la base de la web moderna.



En este artículo, analizaremos cuatro formas probadas de enviar una solicitud POST en PHP. Aprenderás cómo hacerlo con cURL, file_get_contents, stream_context_create y el potente cliente HTTP Guzzle. No solo mostraremos código, sino que explicaremos qué método elegir según tu tarea y cómo evitar errores típicos.



¡Allá vamos! 🚀



¿Qué es una solicitud POST y para qué sirve en PHP?



POST es uno de los métodos del protocolo HTTP, diseñado para enviar datos al servidor. A diferencia de GET, donde los parámetros «se ven» en la URL, POST transmite los datos en el cuerpo de la solicitud. Es útil cuando necesitas:



  • Enviar un formulario de registro o pedido;
  • Llamar a una API REST (por ejemplo, crear un nuevo registro en un CRM);
  • Transferir un archivo a un servidor remoto;
  • Autenticarte en un servicio de terceros.


En PHP no hay una función incorporada «sendPostRequest()», pero hay varias herramientas flexibles que te permiten hacerlo. Veamos cada una de ellas.



Método 1: cURL — el todoterreno



cURL (Client URL Library) es, probablemente, la forma más popular de enviar solicitudes HTTP en PHP. Soporta una gran cantidad de protocolos, puede trabajar con SSL, cookies, tiempos de espera y proxies. Si estás escribiendo algo más serio que un script de aprendizaje, echa un vistazo a cURL.



Solicitud POST simple con cURL



Aquí tienes un ejemplo básico que envía una solicitud POST al servidor de prueba JSONPlaceholder y muestra la respuesta:



// 1. Creamos un nuevo recurso cURL$ch = curl_init();

// 2. Especificamos la URL del endpointcurl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");

// 3. Indicamos que es una solicitud POSTcurl_setopt($ch, CURLOPT_POST, 1);

// 4. Enviamos los datos (el array PHP se convierte automáticamente en una cadena de consulta)curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'title' => 'Mi primer post', 'body' => 'Este es el cuerpo del post', 'userId' => 1]));

// 5. Devolvemos el resultado, en lugar de mostrarlo directamentecurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 6. Ejecutamos la solicitud$response = curl_exec($ch);

// 7. Verificamos si hay erroresif (curl_errno($ch)) { echo 'Error de cURL: ' . curl_error($ch);} else { // 8. Cerramos la conexión curl_close($ch); // 9. Mostramos el resultado echo $response;}


POST con JSON y cabeceras



Las API modernas suelen trabajar con JSON. Así es como puedes enviar datos JSON y establecer la cabecera Content-Type correcta:



$data = [    'email' => 'user@example.com',    'password' => 'secret123'];

$ch = curl_init('https://api.example.com/login');curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Accept: application/json']);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Obtenemos el código HTTP de la respuesta

curl_close($ch);

if ($httpCode === 200) { $result = json_decode($response, true); print_r($result);} else { echo "Error: HTTP $httpCode";}


¿Por qué cURL? Te da control total: puedes configurar un tiempo de espera (CURLOPT_TIMEOUT), seguir redirecciones (CURLOPT_FOLLOWLOCATION), enviar un archivo (CURLFile) e incluso trabajar con FTP. La única desventaja es que el código resulta verboso.



Mét

Blogs

Book Recommendations