Skip to main content

Qué es el cliente HTTP

El cliente HTTP de Laravel es una API sencilla que envuelve a Guzzle. A través del facade Http puedes escribir con concisión peticiones HTTP a servicios y APIs externas.
Guzzle viene preinstalado, así que puedes empezar a usar el cliente sin configuración adicional.

Peticiones básicas

Petición GET

Los parámetros de consulta se pasan como array.

Petición POST

Los datos se envían por defecto como application/json.

PUT / PATCH / DELETE

Manejo de la respuesta

Métodos como Http::get() devuelven una instancia de Illuminate\Http\Client\Response. El objeto ofrece numerosos métodos para inspeccionar la respuesta.
Las respuestas JSON también son accesibles como array.

Opciones de la petición

Cabeceras

Si quieres indicar que aceptas application/json, acceptJson() es una forma más cómoda.
Para las cabeceras CSRF (X-CSRF-TOKEN / X-XSRF-TOKEN) en peticiones AJAX del navegador hacia Laravel, consulta protección CSRF.

Autenticación

Autenticación con Bearer token (la más habitual):
Autenticación básica:

URL base

Si haces muchas peticiones al mismo host, agrúpalas con baseUrl().

Enviar datos de formulario

Para enviar con application/x-www-form-urlencoded utiliza asForm().

Timeouts

Si se supera el timeout se lanza Illuminate\Http\Client\ConnectionException. Es recomendable configurar siempre un timeout en las llamadas a APIs externas.

Reintentos

Puedes configurar reintentos automáticos ante errores puntuales de red o del servidor.
Reintentos condicionales (por ejemplo, solo cuando haya error de conexión):

Gestión de errores

Comprobar los errores manualmente

Por defecto, el cliente HTTP de Laravel no lanza excepciones ante respuestas 4xx o 5xx. Compruébalas explícitamente con failed(), clientError(), etc.

Lanzar excepciones

Con throw() se lanza Illuminate\Http\Client\RequestException cuando hay errores.
throw() devuelve la propia respuesta, por lo que se puede encadenar.
Ejemplo de captura de excepciones:

Peticiones concurrentes

Cuando necesites llamar a varias APIs simultáneamente, utiliza pool() para ejecutarlas en paralelo.
Es mucho más rápido que hacerlas en secuencia. Útil en paneles que consumen varias APIs externas.

Pruebas

Mock con Http::fake()

En tests usa Http::fake() para simular respuestas sin realizar la petición real.
Definir respuestas para URLs concretas:
Secuencia de respuestas (devuelve una respuesta distinta en cada invocación):

Aserciones sobre la petición

Con Http::assertSent() puedes validar el contenido de las peticiones enviadas.
En los tests, invoca siempre Http::fake() al principio. Si te lo saltas, las peticiones irán a las APIs reales. Con Http::preventStrayRequests() puedes hacer que las peticiones a URLs no simuladas lancen una excepción.

Prevención de peticiones no simuladas

Ejemplo práctico: clase de servicio para una API externa

En proyectos reales, la buena práctica es agrupar la lógica del cliente HTTP en clases de servicio.
1

Crear la clase de servicio

2

Registrar el servicio en el service provider

3

Usarlo desde el controlador

4

Escribir los tests

Resumen

  • Agrupa la lógica del cliente HTTP en clases de servicio.
  • Configura siempre un timeout (timeout() y connectTimeout()).
  • Configura reintentos para errores puntuales (retry()).
  • En los tests utiliza siempre Http::fake() y no llames nunca a las APIs reales.
  • Añadir Http::preventStrayRequests() al setup te da un extra de tranquilidad.
  • Guarda tokens y credenciales en variables de entorno y en config/services.php.
Última modificación el 13 de julio de 2026