El comando curl en Linux: transferir datos desde URLs

Introducción

En el mundo de la administración de sistemas y el desarrollo de software, transferir datos desde o hacia servidores remotos es una tarea cotidiana. Una de las herramientas más versátiles y ligeras para lograr esto en entornos Linux es el comando curl. Aunque su nombre proviene de ‘Client URL’, su funcionalidad va mucho más allá de la simple descarga de archivos, permitiendo interactuar con API, probar endpoints y automatizar flujos de trabajo sin necesidad de interfaces gráficas.

¿Qué es curl?

Curl es una herramienta de línea de comandos y una biblioteca libcurl que permite transferir datos utilizando diversos protocolos como HTTP, HTTPS, FTP, FTPS, SCP, SFTP, IMAP, POP3 y SMTP. Su diseño se centra en la simplicidad y la potencia, ofreciendo una sintaxis directa que se puede integrar en scripts shell, cron jobs o pipelines de CI/CD. Gracias a su licencia de código abierto, está disponible en prácticamente todas las distribuciones Linux.

Instalación

En la mayoría de las distribuciones modernas, curl viene preinstalado. Si no está presente, se puede agregar mediante el gestor de paquetes correspondiente. En Debian o Ubuntu se ejecuta sudo apt update && sudo apt install curl. En Red Hat, CentOS o Fedora se usa sudo dnf install curl o sudo yum install curl según la versión. En Arch Linux el comando es sudo pacman -S curl. Tras la instalación, basta con escribir curl –version para verificar.

Sintaxis básica

La forma más simple de usar curl es proporcionar una URL como argumento. Por ejemplo, curl https://ejemplo.com devuelve el contenido del recurso en la salida estándar. Para guardar el resultado en un archivo se agrega la opción -o seguida del nombre del archivo, como curl -o archivo.html https://ejemplo.com. También se puede usar -O (mayúscula) para que curl conserve el nombre original del recurso remoto.

Ejemplos de uso: descarga de archivos

Supongamos que queremos obtener la última versión de un paquete comprimido desde un repositorio. El comando curl -L -o latest.tar.gz https://ejemplo.com/paquetes/latest.tar.gz sigue redirecciones gracias a -L y guarda el archivo con el nombre indicado. Si solo necesitamos ver los encabezados del servidor, curl -I https://ejemplo.com muestra información como el código de estado, el tipo de contenido y la fecha de última modificación.

Envío de datos: solicitudes POST y PUT

Para interactuar con API REST es frecuente enviar datos en el cuerpo de la solicitud. Con curl se puede hacer usando -X POST o -X PUT junto con -d para especificar los datos. Por ejemplo, curl -X POST -d ‘nombre=juan&edad=30’ https://api.ejemplo.com/usuarios envía un formulario codificado como application/x-www-form-urlencoded. Si se prefiere JSON, se agrega -H ‘Content-Type: application/json’ y se pasa el objeto con -d ‘{nombre:juan,edad:30}’.

Opciones útiles

Algunas banderas que resultan muy prácticas en el día a día incluyen -v o –verbose para ver el intercambio completo de encabezados y cuerpos, -s o –silent para suprimir el medidor de progreso y los mensajes de error, -S o –show-error para mostrar errores incluso cuando se usa -s, -L o –follow-location para seguir redirecciones HTTP, -r o –range para descargar solo un rango de bytes útil para reanudar transferencias, y -C – para continuar una descarga interrumpida.

Autenticación

Curl soporta varios métodos de autenticación. Para credenciales básicas HTTP se usa -u usuario:contraseña o bien -u usuario y se solicita la contraseña de forma interactiva. Para tokens de portador, común en APIs modernas, se agrega un encabezado con -H ‘Authorization: Bearer tu_token_aqui’. En conexiones FTP se puede especificar -u para el usuario y la contraseña, y para SFTP se suele combinar con claves SSH mediante la opción –key y –cert si se requieren.

Depuración y verbose

Cuando una petición no se comporta como se espera, la opción -v es indispensable. Muestra la información de la negociación TLS, los encabezados enviados y recibidos, y el cuerpo de la respuesta. Para guardar este registro en un archivo se puede combinar con -o salida.txt o redirigir la salida estándar a un archivo. Además, curl ofrece –trace-ascii archivo.txt que vuelca todo el intercambio en formato legible para un análisis más profundo.

Conclusión

El comando curl es una navaja suiza para cualquiera que trabaje con redes en Linux. Su capacidad para manejar múltiples protocolos, su riqueza de opciones y su facilidad de uso en scripts lo convierten en una herramienta indispensable. Dominar curl no solo acelera tareas de descarga y envío de datos, sino que también abre la puerta a la automatización sofisticada de servicios web y la monitorización de infraestructuras.