POST-consultas en PHP con cURL: guía 2025

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

PHP, cURL y HTTP POST: cómo enviar datos como un profesional en 2025

\n\n

Si alguna vez has escrito código en PHP que necesitaba "hablar" con otro servidor — enviar un formulario, llamar a una API o simplemente transferir datos — seguramente te has encontrado con cURL. No es solo una biblioteca, es una navaja suiza para las consultas HTTP. Y aunque en 2025 tenemos herramientas más modernas como Guzzle o Symfony HttpClient, cURL sigue siendo la base que todo desarrollador PHP debe conocer.

\n\n

La pregunta "PHP, cURL, and HTTP POST example?" en Stack Overflow ha acumulado miles de visitas. ¿Por qué? Porque es esa tarea que aparece en uno de cada dos proyectos: desde la integración con sistemas de pago hasta el envío de datos a un CRM. Analicemos cómo hacerlo de forma correcta, segura y elegante.

\n\n

¿Qué es cURL y por qué se necesita en PHP?

\n\n

cURL (Client URL) es una potente biblioteca que permite que tu script PHP actúe como un cliente HTTP. Imagina que tu código es un navegador sin interfaz. Puede abrir páginas, enviar formularios, descargar archivos e incluso trabajar con cookies.

\n\n

En 2025, cURL sigue siendo relevante porque:

\n
    \n
  • Está integrado en PHP (no es necesario instalar paquetes adicionales)
  • \n
  • Funciona más rápido que algunas bibliotecas "pesadas"
  • \n
  • Ofrece control total sobre cada aspecto de la consulta
  • \n
  • Admite todos los protocolos modernos: HTTP/2, HTTPS, FTP e incluso IMAP
  • \n
\n\n

Ejemplo básico: enviar una consulta POST con cURL

\n\n

Comencemos con lo clásico. Aquí tienes el código mínimo funcional que envía una consulta POST a un servidor:

\n\n
<?php\n// URL a la que enviamos los datos\n$url = 'https://api.example.com/submit';\n\n// Datos a enviar (array asociativo)\n$postData = [\n    'name' => 'Iván Petrov',\n    'email' => 'ivan@example.com',\n    'message' => '¡Hola desde 2025!'\n];\n\n// Inicialización de cURL\n$ch = curl_init($url);\n\n// Configuración de la consulta\ncurl_setopt_array($ch, [\n    CURLOPT_POST => true,                          // Esto es una consulta POST\n    CURLOPT_POSTFIELDS => http_build_query($postData), // Datos en formato de cadena\n    CURLOPT_RETURNTRANSFER => true,                // Devolver la respuesta como cadena\n    CURLOPT_HEADER => false,                       // No devolver encabezados\n    CURLOPT_TIMEOUT => 30,                         // Tiempo de espera de 30 segundos\n    CURLOPT_SSL_VERIFYPEER => true,                // Verificar certificado SSL\n]);\n\n// Ejecutamos la consulta\n$response = curl_exec($ch);\n\n// Verificación de errores\nif (curl_errno($ch)) {\n    echo 'Error de cURL: ' . curl_error($ch);\n} else {\n    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n    echo "Código de respuesta HTTP: $httpCode\\n";\n    echo "Cuerpo de la respuesta: $response";\n}\n\n// Cerramos la conexión\ncurl_close($ch);\n?>
\n\n

Observa el uso de http_build_query(). Es una función útil que convierte un array en una cadena codificada en URL. Sin ella, cURL podría procesar los datos incorrectamente.

\n\n

Envío de JSON en lugar de formulario

\n\n

En 2025, la mayoría de las API trabajan con JSON, no con formularios POST clásicos. Así es como adaptamos nuestro ejemplo:

\n\n
<?php\n$url = 'https://api.example.com/v2/users';\n$jsonData = json_encode([\n    'username' => 'developer_2025',\n    'password' => 'secret_password',\n    'role' => 'admin'\n]);\n\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_POST => true,\n    CURLOPT_POSTFIELDS => $jsonData,  // Enviamos JSON sin procesar\n    CURLOPT_HTTPHEADER => [           // Importante: indicamos los encabezados\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 ($htt                

Blogs

Book Recommendations