Cómo descargar archivos y reanudar descargas con cURL
Para descargar un archivo con cURL, proporciona una URL y un nombre de archivo de salida con
-o. La guía que sigue guarda un paquete de código fuente del proyecto curl,
sigue las redirecciones y muestra cómo continuar la descarga si se interrumpe antes de terminar.
Comprueba cURL en tu terminal
Abre una terminal en un directorio donde puedas guardar archivos. Estos ejemplos usan comandos con sintaxis de Bash y se probaron en macOS con cURL 8.7.1 y 8.22.0. Primero, comprueba la versión instalada:
curl --version
La primera línea debería comenzar con curl y un número de versión. Si el
comando no está disponible, usa la página de descargas de curl para
encontrar una instalación para tu plataforma.
Descarga a un archivo local
Este comando descarga el paquete de código fuente de curl 8.22.0 como archivo de ejemplo. No necesitas compilarlo ni instalarlo. El comando sobrescribe cualquier archivo existente con el mismo nombre, así que elige otro nombre de salida si necesitas conservar ese archivo.
curl -fsSLo curl-8.22.0.tar.xz 'https://curl.se/download/curl-8.22.0.tar.xz'
Las opciones cortas se combinan en -fsSLo:
| Opción | Función |
|---|---|
-f (--fail) | Notifica los errores HTTP, como el 404, como transferencias fallidas. |
-s (--silent) | Oculta el indicador de progreso. |
-S (--show-error) | Mantiene visibles los mensajes de error al usar -s. |
-L (--location) | Sigue las redirecciones HTTP. |
-o (--output) | Guarda la respuesta en el archivo cuyo nombre aparece a continuación. |
Estas opciones se documentan en el manual de curl.
Sin una opción de salida, cURL escribe en la salida estándar, que suele ser tu terminal.
Con -o, escribe en un archivo
en el directorio actual, a menos que proporciones otra ruta.
La opción -L es importante cuando un enlace de descarga redirige a otra
ubicación: cURL solicita el destino y guarda su respuesta con el nombre de archivo que elegiste.
Consérvala tanto en la descarga inicial como en el comando para reanudarla que aparece más abajo.
Si se completa correctamente, este comando no muestra mensajes y vuelve al prompt. Comprueba el tamaño del archivo guardado:
wc -c < curl-8.22.0.tar.xz
Para este paquete, el tamaño es de 2953092 bytes. Esto comprueba el tamaño, no el
contenido; usa la suma de comprobación del distribuidor cuando necesites verificar los bytes
descargados. Para descargar tu propio archivo, reemplaza tanto la URL como el nombre del archivo de
salida. Mantén la URL entre comillas para que los caracteres del intérprete de comandos, como
&, no dividan el comando.
Reconoce una descarga fallida
Con -f, una respuesta como HTTP 404 o 500 hace que cURL termine con el código
22 y un mensaje de error, sin guardar la página de error del servidor como
archivo descargado. Sin -f, una respuesta de error HTTP puede parecer una
transferencia correcta. Consulta el comportamiento de --fail
en el manual.
Un fallo de red puede dejar un archivo parcial en el disco. La mera presencia de un archivo no
demuestra que la transferencia haya terminado. Si la URL devuelve una página de inicio de sesión con
HTTP 200, -f tampoco lo detectará: cURL no puede determinar si esos bytes
corresponden al archivo que querías descargar.
Reanuda una descarga interrumpida
Si una descarga se interrumpe, conserva su archivo parcial. Para probarlo, inicia una nueva descarga
con un límite de velocidad y luego pulsa Ctrl+C después de unos segundos. Esto sobrescribe
intencionalmente el paquete que acabas de descargar. Aquí el indicador de progreso es visible porque
el comando omite -s.
curl -fSL --limit-rate 50K -o curl-8.22.0.tar.xz 'https://curl.se/download/curl-8.22.0.tar.xz'
Continúa desde el mismo directorio, con el mismo nombre de archivo de salida y la misma URL:
curl -fsSL -C - -o curl-8.22.0.tar.xz 'https://curl.se/download/curl-8.22.0.tar.xz'
El valor - después de -C indica a cURL que use el
tamaño del archivo local como desplazamiento inicial en bytes. Para HTTP, el servidor debe respetar
la solicitud de rango para que cURL pueda añadir los bytes restantes. La
guía de curl para reanudar descargas
explica cómo se elige el desplazamiento. Una vez que el comando termine correctamente, repite la
comprobación de tamaño anterior.
Si el servidor ignora la solicitud de rango, cURL informa del error 33 en
lugar de reanudar la descarga. Reiníciala con el comando de descarga original, sin
-C -, para reemplazar el archivo parcial por una descarga completa.
Reanuda únicamente la descarga de un archivo cuyo contenido remoto no haya cambiado. cURL usa la longitud del archivo parcial; no compara los bytes ya guardados con la copia del servidor. Por tanto, un archivo remoto modificado puede producir una mezcla de contenido antiguo y nuevo, incluso si la transferencia se completa correctamente. Una URL de descarga con una versión específica, como la del paquete usado aquí, evita depender de una URL de «última versión» cuyo contenido cambia. Si no sabes con certeza si el archivo ha cambiado, empieza de nuevo.
Para subir archivos y ejecutar un Template de Transloadit, consulta la guía de la API para crear una Assembly.
