Linux / Comando curl: consultar respuestas HTTP y controlar errores

curl es una herramienta para solicitar o enviar datos mediante URL. Se utiliza para varias tareas como verificar encabezados de respuesta HTTP, llamadas a API, descarga de archivos, etc., y, de manera predeterminada, muestra el cuerpo de la respuesta en la salida estándar.

Incluso si se devuelve un estado de error HTTP, el estado de salida predeterminado de curl puede ser éxito. Para que un script considere los errores 4xx o 5xx como fallos, use --fail o, según la situación, --fail-with-body. -L sigue redirecciones y -o guarda el resultado en un archivo especificado.

Sintaxis básica

curl [opciones] URL

La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man curl en el sistema actual.

Ejemplos de uso

Verificar encabezados de respuesta

Si el servidor admite solicitudes HEAD, puede ver los encabezados y el estado HTTP.

curl -I https://example.com/

Solicitar el recurso y seguir redirecciones

Sigue las redirecciones y trata los errores HTTP como fallos.

curl -fL https://example.com/

Guardar en archivo

Guarda el cuerpo en el archivo indicado. Elija un nombre de destino que no contenga datos que deba conservar, porque -o puede reemplazar un archivo existente.

curl -fL -o example.html https://example.com/

Obtener solo el código de estado HTTP

curl envía una solicitud URL y verifica la respuesta. A continuación, descarta el cuerpo y solo muestra el código de estado HTTP, lo que facilita distinguir resultados como 200, 404 o 500 en la automatización.

curl -sS -o /dev/null -w '%{http_code}\n' https://example.com

Ejemplo de salida en el momento de recibir una respuesta normal:

200

200 es el estado HTTP OK comunicado por el servidor, pero no demuestra que el cuerpo tenga el contenido esperado. Un fallo de conexión puede producir 000 y un mensaje de error: consulte también el estado de salida del proceso. El comando de este ejemplo no usa -f, por lo que informa del código incluso cuando se recibe un error HTTP. Añada -L si necesita seguir la redirección hasta el destino final.

Sin -f, curl puede terminar con estado de salida 0 después de recibir un 4xx o 5xx si la transferencia se completó. --fail y, si su versión lo admite, --fail-with-body ayudan a tratarlos como fallos, pero no sustituyen la comprobación del estado esperado; el manual señala excepciones con autenticación, como 401 y 407. Evite exponer tokens en argumentos, diagnósticos o registros.

Opciones y formatos principales

Opción o formato Descripción
-I Verifica las cabeceras de respuesta con una solicitud HEAD.
-L Sigue la redirección.
-o archivo Guarda la respuesta en un archivo especificado.
-O Guarda con el nombre tomado del último componente de la ruta de la URL.
-f Normalmente falla ante estados HTTP 400 o superiores y omite el cuerpo; revise las excepciones de autenticación.
-H encabezado Se especifican los encabezados de la solicitud.

Precauciones al usar

Dado que el servidor puede rechazar HEAD, no asuma que la URL no existe solo por un fallo curl -I, verifíquelo nuevamente con GET. No conecte scripts de URLs indeterminadas directamente a la shell. Si pone el token de autenticación directamente en la línea de comandos, puede quedar en el historial de la shell o en la lista de procesos, y -k desactiva la verificación del certificado, reduciendo la seguridad.

Preguntas frecuentes

¿Por qué curl parece tener éxito cuando recibe un 404?

Porque, por defecto, se trata por separado el estado HTTP y el éxito de la transferencia de curl. En los scripts, revise -f o --fail-with-body.

Documentación oficial

Puede verificar el comportamiento exacto de las opciones y las diferencias según la implementación en la documentación oficial de curl.