La descarga de contenido desde servidores remotos es una tarea habitual tanto para administradores como para desarrolladores. Aunque existen numerosas herramientas para este trabajo, cURL destaca por su adaptabilidad y simplicidad. Es una utilidad de línea de comandos que admite protocolos como HTTP, HTTPS, FTP y SFTP, lo que la hace esencial para la automatización, los scripts y las transferencias de archivos eficientes.
Puedes ejecutar cURL directamente en tu computadora para obtener archivos. También puedes incluirlo en scripts para optimizar el manejo de datos, reduciendo así el esfuerzo manual y los errores. Esta guía muestra varias formas de descargar archivos con cURL. Siguiendo estos ejemplos, aprenderás a manejar redirecciones, renombrar archivos y monitorear el progreso de las descargas. Al final, deberías poder usar cURL con confianza para tareas en servidores o entornos en la nube.
El comando curl funciona con varios protocolos, pero se utiliza principalmente con HTTP y HTTPS para conectarse a servidores web. También puede interactuar con servidores FTP o SFTP cuando sea necesario.
Por defecto, cURL recupera un recurso de una URL especificada y lo muestra en tu terminal (salida estándar). Esto es útil para previsualizar el contenido de archivos sin guardarlos, especialmente si se trata de archivos de texto pequeños.
Ejemplo: Para ver el contenido de un archivo de texto alojado en https://example.com/file.txt, ejecuta:
curl https://example.com/file.txt
Para documentos de texto cortos, este enfoque es adecuado. Sin embargo, los archivos grandes o binarios pueden llenar la pantalla con datos ilegibles, por lo que normalmente querrás guardarlos en su lugar.
A menudo, el objetivo principal es almacenar el archivo descargado en tu máquina local en lugar de verlo en la terminal. cURL simplifica esto con la opción -O (O mayúscula), que conserva el nombre original del archivo remoto.
curl -O https://example.com/file.txt
Esto descarga file.txt y lo guarda en el directorio actual con el mismo nombre. Este método es rápido y mantiene el nombre del archivo existente, lo cual puede ser útil si el nombre tiene relevancia.
A veces es importante renombrar el archivo descargado para evitar conflictos o crear un esquema de nombres claro. En este caso, utiliza la opción -o (o minúscula):
curl -o myfile.txt https://example.com/file.txt
Aquí, cURL descarga el archivo remoto file.txt pero lo guarda localmente como miarchivo.txt. Esto ayuda a mantener los archivos organizados o evita sobrescrituras accidentales. Es especialmente útil en scripts que requieren nombres de archivo descriptivos.
Cuando se solicita un archivo, los servidores pueden instruir a tu cliente para que vaya a una URL diferente. Comprender y manejar las redirecciones es fundamental para realizar descargas exitosas.
Las redirecciones se usan comúnmente en sitios web reorganizados, archivos movidos o enlaces espejo. Sin soporte para redirecciones, cURL se detiene después de recibir una respuesta de “movido” y no obtendrás el archivo.
Para indicarle a cURL que siga una cadena de redirecciones hasta llegar al destino final, utiliza -L (o --location):
curl -L -O https://example.com/redirected-file.jpg
Esto permite que cURL obtenga el archivo correcto incluso si la URL original apunta a otro lugar. Si omites -L, cURL simplemente mostrará el mensaje de redirección y finalizará, lo que puede causar problemas en sitios con múltiples redirecciones.
cURL también puede manejar múltiples descargas a la vez, evitando que ejecutes el comando repetidamente.
Si los nombres de los archivos comparten un patrón, las llaves {} te permiten especificar cada nombre de manera concisa:
curl -O https://example.com/files/{file1.jpg,file2.jpg,file3.jpg}
cURL descarga cada archivo en secuencia, lo que resulta práctico para flujos de trabajo automatizados.
Para una serie de archivos numerados o etiquetados alfabéticamente, especifica un rango entre corchetes:
curl -O https://example.com/files/file[1-5].jpg
cURL itera automáticamente por los archivos file1.jpg hasta file5.jpg. Esto es ideal para secuencias de archivos con nombres consistentes.
Si tienes diferentes URLs para cada archivo, puedes encadenarlas juntas:
curl -O https://example1.com/file1.jpg -O https://example2.com/file2.jpg
Este método descarga file1.jpg del primer sitio y file2.jpg del segundo, sin necesidad de ejecutar múltiples comandos.
En ciertas situaciones, puede que quieras controlar la velocidad de descarga o evitar que cURL espere demasiado por un servidor que no responde.
Para evitar saturar tu red o simular condiciones lentas, limita la velocidad de descarga con --limit-rate:
curl --limit-rate 2M -O https://example.com/bigfile.zip
2M significa 2 megabytes por segundo. También puedes usar K para kilobytes o G para gigabytes.
Si un servidor es demasiado lento, puede que quieras que cURL se detenga después de cierto tiempo. La opción --max-time hace precisamente eso:
curl --max-time 60 -O https://example.com/file.iso
Aquí, cURL se detiene después de 60 segundos, lo cual es útil en scripts que necesitan fallar rápidamente cuando hay problemas.
cURL puede ajustar su salida para mostrar información mínima o detalles extensos.
Para tareas automáticas o cron jobs donde no necesitas ver barras de progreso, incluye -s (o --silent):
curl -s -O https://example.com/file.jpg
Esto oculta el progreso y los errores, lo cual es útil para registros más limpios. Sin embargo, la depuración es más difícil si ocurre un error silencioso.
En contraste, -v (o --verbose) muestra información detallada sobre las solicitudes y respuestas:
curl -v https://example.com
La salida detallada es invaluable para depurar problemas como certificados SSL inválidos o redirecciones incorrectas.
Algunas descargas requieren credenciales o una conexión segura.
Cuando un servidor requiere un nombre de usuario y contraseña, usa -u:
curl -u username:password -O https://example.com/protected/file.jpg
Incrustar credenciales directamente puede ser riesgoso, ya que podrían aparecer en registros o listas de procesos. Considera usar variables de entorno o archivos .netrc para un manejo más seguro.
Por defecto, cURL verifica los certificados SSL. Si el certificado no es válido, cURL bloquea la transferencia. Puedes omitir esta verificación con -k o --insecure, aunque esto implica riesgos de seguridad. Siempre que sea posible, usa una autoridad certificadora de confianza para mantener las conexiones autenticadas.
En algunos entornos, el tráfico debe pasar por un servidor proxy antes de llegar al destino.
Usa la opción -x o --proxy para especificar el proxy:
curl -x http://proxy_host:proxy_port -O https://example.com/file.jpg
Reemplaza proxy_host y proxy_port con los datos correspondientes. cURL envía la solicitud al proxy, que luego recupera el archivo por ti.
Si tu proxy requiere credenciales, inclúyelas en la URL:
curl -x https://proxy.example.com:8080 -U myuser:mypassword -O https://example.com/file.jpg
Nuevamente, almacenar datos sensibles en texto plano puede ser peligroso, por lo que las variables de entorno o los archivos de configuración son opciones más seguras.
El seguimiento del progreso de la descarga es crucial para archivos grandes o conexiones lentas.
Por defecto, cURL muestra un medidor de progreso que incluye el tamaño total, la velocidad de transferencia y el tiempo estimado de finalización. Por ejemplo:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 2243 0 --:--:-- --:--:-- --:--:-- 2246
Esta salida te ayuda a estimar cuánto falta y si la velocidad de transferencia es adecuada.
Si prefieres menos detalles, agrega -#:
curl -# -O https://example.com/largefile.iso
Una barra más simple muestra el progreso general en porcentaje. Es más fácil de leer pero no incluye estadísticas detalladas como la velocidad actual.
Cuando uses cURL dentro de scripts, quizás quieras registrar los datos del progreso. Normalmente, cURL envía esta información a stderr, por lo que puedes redirigirla:
curl -# -O https://example.com/largefile.iso 2>progress.log
Aquí, progress.log contiene las actualizaciones de estado que puedes analizar o guardar para revisarlas más tarde.
cURL destaca como una herramienta flexible de línea de comandos para descargar archivos a través de múltiples protocolos y entornos. Ya sea que necesites manejar redirecciones complejas, renombrar archivos al vuelo o limitar el ancho de banda, cURL te ofrece las opciones adecuadas. Al dominar sus principales parámetros y modos, podrás integrar cURL sin problemas en tu flujo de trabajo diario para scripting, automatización y transferencias de archivos más eficientes.