Cliente HTTP en PHP: haciendo solicitudes correctamente de la A a la Z

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

Introducción: ¿por qué necesito un cliente HTTP en PHP?

\n\n

El desarrollo web moderno es impensable sin la interacción con servicios externos. Ya sea enviar datos a una API de terceros, obtener el tipo de cambio o integrarse con una pasarela de pago, todo desarrollador PHP se enfrenta a la necesidad de realizar solicitudes HTTP. Crear un cliente HTTP confiable en PHP es una competencia básica que permite que su aplicación se comunique con el resto del mundo.

\n\n

En este artículo, analizaremos dos enfoques principales: el uso de la extensión integrada cURL y la popular biblioteca Guzzle. Aprenderá cómo enviar correctamente solicitudes GET, POST, PUT y DELETE, manejar errores y trabajar con encabezados. El material será útil tanto para principiantes como para desarrolladores experimentados que deseen sistematizar sus conocimientos.

\n\n

1. Fundamentos del cliente HTTP en PHP: trabajando con cURL

\n\n

1.1. ¿Qué es cURL y por qué es importante?

\n\n

cURL (Client URL Library) es una potente extensión de PHP que permite interactuar con varios servidores mediante los protocolos HTTP, HTTPS, FTP y otros. Viene incluida en la distribución estándar de PHP, pero a veces requiere activación por separado en php.ini. cURL brinda control total sobre la solicitud: puede establecer cualquier método, encabezados, cuerpo de la solicitud y tiempos de espera.

\n\n

1.2. Solicitud GET simple con cURL

\n\n

Comencemos con el escenario más común: obtener datos del servidor. Veamos un ejemplo de solicitud a la API pública JSONPlaceholder:

\n\n
<?php\n// Inicialización de la sesión cURL\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n\n// Configuración de opciones\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_HTTPGET, true);\ncurl_setopt($ch, CURLOPT_TIMEOUT, 30);\n\n// Ejecución de la solicitud\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n\n// Verificación de errores\nif (curl_errno($ch)) {\n    echo 'Error cURL: ' . curl_error($ch);\n} else {\n    echo "Código HTTP: $httpCode\\n";\n    $data = json_decode($response, true);\n    print_r($data);\n}\n\n// Cierre de la sesión\ncurl_close($ch);\n?>
\n\n

Tenga en cuenta: siempre verificamos el código de respuesta y la presencia de errores. CURLOPT_RETURNTRANSFER garantiza que el resultado se devuelva en una variable, en lugar de mostrarse directamente.

\n\n

1.3. Envío de una solicitud POST con datos

\n\n

Para enviar datos al servidor (por ejemplo, al crear un nuevo registro), usamos POST. Los datos se pueden transmitir como un array o una cadena JSON:

\n\n
<?php\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts');\n\n$postData = [\n    'title' => 'Nuevo post',\n    'body' => 'Contenido del post',\n    'userId' => 1\n];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_POSTFIELDS => json_encode($postData), // JSON\n    CURLOPT_HTTPHEADER => [\n        'Content-Type: application/json',\n        'Accept: application/json'\n    ],\n    CURLOPT_TIMEOUT => 30\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\necho "Código HTTP: $httpCode\\n";\necho $response;\n?>
\n\n

Punto clave: si pasa un array en CURLOPT_POSTFIELDS, PHP lo codificará automáticamente como application/x-www-form-urlencoded. Para JSON, debe usar json_encode() e indicar explícitamente el encabezado Content-Type.

\n\n

1.4. Solicitudes PUT y DELETE

\n\n

Para actualizar y eliminar recursos se utilizan los métodos PUT y DELETE. En cURL, se configuran mediante la opción CURLOPT_CUSTOMREQUEST:

\n\n
<?php\n// Solicitud PUT (actualización)\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n$updateData = ['title' => 'Título actualizado'];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_CUSTOMREQUEST => 'PUT',\n    CURLOPT_POSTFIELDS => json_encode($updateData),\n    CURLOPT_HTTPHEADER =>                

Blogs

Book Recommendations