Introducción
En el desarrollo web moderno con PHP, prácticamente ningún proyecto prescinde del envío de solicitudes HTTP. Ya sea la integración con una API externa, la obtención de datos de un servidor remoto, el envío de formularios o la verificación de disponibilidad de recursos — saber trabajar correctamente con clientes HTTP es una habilidad obligatoria para cualquier desarrollador PHP.
En este artículo analizaremos tres formas principales de crear un cliente HTTP en PHP: las funciones integradas file_get_contents y cURL, así como la popular biblioteca Guzzle. Aprenderá cómo enviar correctamente solicitudes GET y POST, manejar errores, trabajar con encabezados y tiempos de espera. El material será útil tanto para principiantes como para desarrolladores experimentados que deseen sistematizar sus conocimientos.
1. La forma más simple: file_get_contents
La forma más rápida de enviar una solicitud GET en PHP es usar la función file_get_contents() especificando la URL. Sin embargo, este método tiene limitaciones serias.
Solicitud GET simple
<?php$url = 'https://api.example.com/users';$response = file_get_contents($url);if ($response === false) { echo 'Error al obtener datos';} else { echo $response;}?>Agregar encabezados mediante stream context
Para agregar encabezados o cambiar el método de la solicitud, es necesario usar stream_context_create():
<?php$url = 'https://api.example.com/data';$options = [ 'http' => [ 'method' => 'GET', 'header' => "Accept: application/json\\r" . "Authorization: Bearer your-token\\r" ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);if ($response === false) { echo 'Error en la solicitud';} else { $data = json_decode($response, true); print_r($data);}?>Solicitud POST mediante file_get_contents
<?php$url = 'https://api.example.com/create';$data = ['name' => 'John', 'email' => 'john@example.com'];$options = [ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: application/json\\r", 'content' => json_encode($data) ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);?>Desventajas de file_get_contents:
- No admite tiempos de espera (por defecto espera indefinidamente)
- Difícil manejar errores de conexión
- No es posible descargar archivos por partes
- No es adecuado para escenarios complejos
2. Herramienta potente: cURL
cURL es la herramienta estándar para trabajar con HTTP en PHP. Proporciona control total sobre las solicitudes y admite prácticamente todas las capacidades del protocolo.
Inicialización básica y solicitud GET
<?php$ch = curl_init('https://api.example.com/users');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);if (curl_errno($ch)) { echo 'cURL error: ' . curl_error($ch);} else { $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo "Código HTTP: $httpCode"; echo $response;}curl_close($ch);?>Solicitud POST con datos
<?php$ch = curl_init('https://api.example.com/users');curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([ 'name' => 'Jane Doe', 'email' => 'jane@example.com' ]), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Accept: application/json' ], CURLOPT_TIMEOUT => 30, CURLOPT_CONNECTTIMEOUT => 10]);$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);