Introducción: ¿Por qué un desarrollador PHP debe saber enviar solicitudes POST?
\n\nImagina esta situación: estás creando un sitio web en PHP y necesitas enviar datos a otro servidor. Por ejemplo, registrar un usuario a través de una API externa, enviar un formulario a un sistema CRM o probar tu propio manejador de solicitudes POST. Esta es una tarea clásica que todo desarrollador web enfrenta.
\n\nLa pregunta "How do I send a POST request with PHP?" en Stack Overflow ha acumulado cientos de miles de visitas. Y no es casualidad: aunque PHP es un lenguaje potente, los principiantes a menudo se confunden: ¿qué método elegir? ¿Acaso no se pueden simplemente enviar los datos?
\n\nSí se puede. E incluso de cuatro formas diferentes. En este artículo, analizaremos cada una, mostraremos ejemplos reales de código en PHP, compararemos el rendimiento y te diremos cuándo usar cada método. Al final del artículo, te sentirás seguro enviando solicitudes POST en cualquier proyecto.
\n\nMétodo 1. El clásico: cURL (el más flexible y potente)
\n\ncURL es una biblioteca que está presente en prácticamente todos los servidores de alojamiento. Soporta HTTPS, cookies, cabeceras, tiempos de espera y mucho más. Si necesitas enviar una solicitud POST con el máximo control, elige cURL.
\n\nEjemplo simple: enviar un formulario con los campos nombre y email
\n\n<?php\n$url = 'https://api.example.com/submit';\n$data = [\n 'name' => 'Juan Pérez',\n 'email' => 'juan@example.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// Si necesitas 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 "¡Éxito! Respuesta del servidor: " . $response;\n} else {\n echo "Error. Código HTTP: " . $httpCode;\n}\n?>\n\nDetalles importantes de cURL:
\n- \n
- http_build_query() — convierte un array en una cadena como
name=Juan&email=juan@example.com. Este es el formato estándar para formularios. \n - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) — para que el resultado de la solicitud se devuelva en una variable, en lugar de mostrarse directamente. \n
- Siempre verifica el código de respuesta HTTP (200 — éxito, 4xx/5xx — error). \n
- Si el servidor requiere JSON: reemplaza
http_build_queryporjson_encodey añade la cabeceraContent-Type: application/json. \n
Método 2. Rápido y sencillo: file_get_contents con contexto
\n\nMuchos conocen file_get_contents() como una función para leer archivos. Pero pocos saben que, con Stream Context, también puede enviar solicitudes POST. Es una excelente opción si tienes una tarea simple y no quieres usar bibliotecas externas.
Ejemplo de envío de solicitud POST con file_get_contents
\n\n<?php\n$url = 'https://api.example.com/submit';\n$data = [\n 'name' => 'Juan Pérez',\n 'email' => 'juan@example.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 "Error al enviar la solicitud";\n} else {\n echo "Respuesta del servidor: " . $result;\n}\n?>\n\n¿Cuándo usar este método?
\n- \n
- Cuando necesitas probar rápidamente el envío de datos. \n
- Cuando no quieres escribir mucho código con cURL. \n
- Desventaja: es difícil manejar errores (no hay acceso directo al código HTTP). \n