es
English
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski cURL o Client URL es una herramienta desarrollada para obtener archivos, interactuar con APIs e incluso para probar recursos web. También está disponible para los sistemas operativos Windows, Mac y Linux lo que facilita a cualquier usuario de cURL la descarga de archivos. Client URL es apropiado tanto para la simple descarga de archivos como para tareas más avanzadas que impliquen la manipulación de datos e incluso para la incrustación de scripts.
En este artículo, cubriremos cómo descargar archivos usando cURL, cubriendo algunos comandos cURL útiles para descargar, especificar nombres, carpeta, y tratar con redirecciones, aceleradores de velocidad, y mucho más. También cubriremos comandos específicos para cURL en sistemas Windows, Linux y Mac.
Es esencial elegir el nombre de archivo correcto al guardar el documento descargado. cURL no guarda los datos, sino que los muestra en el terminal. Por lo tanto, si el usuario no selecciona una ubicación para guardar el archivo, éste no se encontrará en el sistema de archivos.
Todos los comandos con cURL se realizan en la línea de comandos: utilizando Windows - cmd o PowerShell y Linux o macOS - terminal.
Para nombrar archivos manualmente, el usuario debe utilizar el comando "-o" o alternativamente para su formato verboso "-output".
Considere el siguiente ejemplo:
curl -o test.html https://example.com
Este comando buscará la página en ejemplo.com y la guardará como prueba.html en el directorio de trabajo actual.
cURL, por defecto, guardará el archivo en el mismo directorio que contiene el archivo ejecutable a menos que se especifique lo contrario.
Cómo se guarda un archivo utilizando cURL junto con la especificación del directorio en el que se guardará el archivo:
curl -o ~/Downloads/test.html https://example.com
Esta opción colocará el archivo en la subcarpeta Descargas del directorio personal del usuario.
En esta configuración, si ya existe un archivo, el nuevo archivo sustituirá al antiguo sin advertencias. Para evitar esto, cURL -O para que el archivo se pueda guardar con el nombre proporcionado en la URL:
curl -O https://example.com/file.txt
Si file.txt es lo que se indica en la URL, se almacenará automáticamente con ese nombre. Si dicho archivo ya existe, será reemplazado.
Para garantizar que no haya pérdida de datos, se puede establecer un aviso de verificación antes de la descarga:
if [ -f file.txt ]; then
echo "File already exists!"
else
curl -O https://example.com/file.txt
fi
This script first scans to see if the file is already present, only downloading the file if it is not.
Algunos archivos no se guardan en ubicaciones específicas, sino que se obtienen a través de una redirección. Por ejemplo, un usuario de cURL que intente descargar un archivo grande puede descubrir que el navegador le dirige a otra página antes de iniciar la descarga. cURL no sigue las redirecciones por defecto a, pero esto puede cambiarse.
Para que cURL siga automáticamente las redirecciones, añada el indicador -L:
curl -L -o test.zip https://example.com/download
Si el servidor redirige inicialmente al usuario, cURL realizará primero la nueva petición y sólo entonces se descargará el archivo de la URL.
Por qué es importante:
El método de cURL procesa cada redirección en orden, siguiendo cada enlace que lleva a otra URL en secuencia hasta llegar al enlace de destino. En el caso de que el servidor se quede atascado en un bucle interminable de redirecciones, el servidor se verá atrapado. cURL tiene un comando que se puede utilizar para gestionar el número de redirecciones, que es '--max-redirs'.
curl -L --max-redirs 5 -o file.zip https://example.com/download
Este parámetro impone una restricción a cURL, de modo que detiene el proceso de descarga si se procesan demasiadas redirecciones y se supera el límite especificado.
Un ejemplo que da cURL cuando se sobrepasan los límites de redirección es el siguiente:
curl: (47) Maximum redirection limit reached
Con cURL puedes descargar varios archivos simultáneamente, y algunos comandos funcionan en varios sistemas operativos, mientras que otros son específicos de Windows o Linux/macOS.
curl -O https://example.com/file1.zip -O https://example.com/file2.zip
curl -O https://example.com/file{1,2,3}.zip
Get-Content urls.txt | ForEach-Object { curl -O $_ }
For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
Para empezar, cree un archivo urls.txt que contenga una lista de enlaces:
https://example.com/file1.zip
https://example.com/file2.zip
https://example.com/file3.zip
A continuación, ejecuta el comando:
xargs -n 1 curl -O < urls.txt
En el caso de que los ficheros estén numerados, es conveniente utilizar para:
for i in {1..5}; do
curl -O https://example.com/file$i.zip
done
Cuando se necesita descargar un archivo grande utilizando cURL y se espera un tráfico de bajo ancho de banda, está disponible la opción --limit-rate, que ayuda a establecer un límite en la velocidad de descarga en (k) kilobytes por segundo, (m) megabytes por segundo, o (g) gigabytes por segundo.
Para los usuarios de cURL, la estructura de comandos es la misma en todos los sistemas operativos:
curl --limit-rate 500k -O https://example.com/archive.zip
En este caso, 500k significa que la velocidad de descarga no debe superar los 500 KB/s.
Otras notas:
A continuación se muestra un script de ejemplo para descargar archive1.zip, archive2.zip y archive3.zip a una velocidad de descarga de 500 KB/s.
Windows (PowerShell):
1..3 | ForEach-Object { curl --limit-rate 500k -O https://example.com/archive$_.zip }
Linux/macOS (Bash):
for i in {1..3}; do
curl --limit-rate 500k -O https://example.com/archive$i.zip
done
La opción --limit-rate es eficaz en condiciones de conexión de red sostenida, ya que reduce las posibilidades de interrupción de la red. Esto es útil cuando se están descargando varios archivos a la vez, o si se están realizando otras actividades en la red. Además, --limit-rate ayuda a mitigar las posibilidades de ser bloqueado por un servidor que tenga restricciones para las descargas. Cuando la descarga se realiza a través de un proxy, el parámetro ayuda a reducir la carga y minimizar las posibilidades de quedarse bloqueado. Este comando también ayuda a gestionar el tráfico cuando se trabaja con Internet móvil o tarifas con una cantidad limitada de datos.
En cURL, el progreso de una descarga, junto con su velocidad, se muestra por defecto en una ventana de terminal. Esto es útil para algunos usuarios de cURL, sin embargo, puede suprimirse para scripts o procesos automatizados. En estos casos, se puede activar la bandera -s o --silent.
Ejemplo de cómo utilizar la línea de comandos cURL en modo "silencioso" para descargar archivos:
curl -s -O https://example.com/file.zip
Como sugiere el comando, todos los archivos se descargarán con cURL sin mostrar información en pantalla. En caso de que sea necesario mostrar sólo los errores, y poner todos los demás mensajes en silencio, se puede utilizar -S (--show-error) y combinarlo con los argumentos antes mencionados:
curl -s -S -O https://example.com/file.zip
La descarga de algunos archivos y el uso de algunas API requieren autorización. cURL tiene una arquitectura que admite un buen número de procedimientos de autenticación, como los que utilizan un nombre de usuario y una contraseña, o incluso tokens de acceso.
En caso de que el acceso requiera un nombre de usuario y una contraseña, éstos pueden enviarse como un único argumento con la bandera -u:
curl -u username:password -O https://example.com/protected-file.zip
Si la contraseña lleva componentes especiales como, por ejemplo, @, #, &, etc., es aconsejable entrecomillarla:
curl -u username:"your@password#123" -O https://example.com/protected-file.zip
En caso de que sólo se envíe el nombre de usuario, cURL solicita la contraseña.
Otro método de autenticación en un sistema emisor puede realizarse utilizando un token de acceso, en este caso, el token se incluye en la cabecera de la solicitud con el como se muestra a continuación:
curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json
Algunos servicios pueden requerir que el token se incluya directamente en la URL. Entonces el comando tendrá el siguiente aspecto:
curl -O https://api.example.com/data.json?access_token=your_token_here
En cualquier caso, poner el token en la URL puede ser problemático porque el nombre de la ruta del usuario podría almacenarse en el historial del navegador o en los registros del servidor.
Estos métodos de autenticación funcionan bien cuando uno necesita obtener datos de los archivos de un servidor protegido, solicitar datos de API o acceder a datos desde un entorno corporativo.
Los proxies son especialmente útiles para cURL y su uso común es en el acceso remoto a archivos ya que cURL soporta la transmisión de datos a través de la mayoría de los protocolos.
La configuración de un proxy se realiza con -x (o -proxy).
La forma general del comando es la siguiente:
curl -x [scheme://]proxy-server[:port] -o output.file URL
Ejemplo: descarga de un archivo a través de un proxy HTTP:
curl -x http://proxy.testnet.com:80 -o file.zip https://example.com/archive.zip
Where:
Cuando se requiere un nombre de usuario y una contraseña para los servidores proxy, se pueden utilizar así:
curl -x http://proxy.example.com:80 -U user:password -o archive.zip https://example.com/archive.zip
Un enfoque diferente - pasar la autenticación a través de la URL:
curl -x http://user:password@proxy.example.com:80 -o archive.zip https://example.com/archive.zip
Para trabajar con SOCKS5 o SOCKS4, establezca el parámetro --proxy con el tipo, por ejemplo:
curl --proxy socks5h://proxy.example.com:1080 -o archive.zip https://example.com/archive.zip
Matiz importante:
El proxy proporcionará anonimato, ya que la dirección IP original no estará disponible para los sitios que visite el usuario. Además, los bloqueos de recursos de determinadas regiones pueden eludirse si se accede desde otro país. Al utilizar un proxy para descargar archivos, los usuarios de redes corporativas pueden acceder a recursos cerrados y mejorar la velocidad de carga como resultado de la restricción del proveedor o del almacenamiento de datos en caché.
Es aconsejable permanecer alerta para supervisar adecuadamente el proceso de descarga de archivos utilizando cURL, particularmente con archivos de gran tamaño. Esto se puede lograr mediante la utilización de capacidades incorporadas que incluyen pantallas de progreso como una barra de descarga interactiva, así como detallada.
El indicador -# o --progress-bar sustituye el indicador básico de porcentaje de descarga por una barra móvil. Esto es útil si se requiere medir el rendimiento del sistema de una forma más compacta y gráfica.
curl -# -o file.zip https://example.com/file.zip
Una barra con indicador de llenado se mueve de izquierda a derecha:
Este método es conveniente si uno desea seguir la operación con un límite en la cantidad de información mostrada.
Para observar con mayor detalle la velocidad, el tiempo y la cantidad de datos que se están descargando, se pueden utilizar las opciones -v y -w conjuntamente.
curl -v -o file.zip https://example.com/file.zip
curl -o file.zip -w "Download speed: %{speed_download} bits per second\n" https://example.com/file.zip
Esto permite monitorizar la velocidad de descarga durante todo el proceso.
Para los casos en los que la conexión es inestable, la velocidad de descarga se puede juzgar de cerca. Si hay obstrucciones, se producirá una caída repentina de la velocidad del proceso o una disminución total. Cuando la conexión es estable, se puede controlar la velocidad y el rendimiento general de la red.
El comando cURL permite recuperar multitud de información que puede ayudar a identificar problemas como desconexiones, ratificaciones o incluso parámetros de códigos de respuesta HTTP que pueden ser cruciales en el diagnóstico de errores. Para ello, se utilizará la bandera -v que activa el modo de salida expandida.
Ejemplo:
curl -v -o file.zip https://example.com/archive.zip
La salida tendrá un aspecto similar al siguiente durante la ejecución del comando.
Observará los siguientes datos clave:
Los detalles de las peticiones y respuestas del servidor se pueden ver con cURL incluyendo la bandera -v. Esto proporciona información sobre cómo el cliente se comunica con el servidor. Por ejemplo, en el caso de una redirección, si el servidor cambia la ubicación a una nueva URL, "-v" indicará el uso de los comandos "status 301 Moved Permanently" o "302 Found".
También se puede utilizar para comprobar errores, como "403 Forbidden" o "404 Not Found", que hacen referencia a accesos restringidos y ausencia de archivos. Además, también se pueden comprobar las cabeceras de respuesta para analizar diferentes parámetros del archivo antes del proceso de descarga.
cURL y Wget son las dos herramientas más destacadas para la descarga de archivos en interfaces de línea de comandos y cURL y Wget se utilizan ampliamente para ese fin, aunque difieren en sus funcionalidades.
Además, veamos las principales distinciones entre ellos.
| Función | cURL | Wget |
|---|---|---|
| Soporte para descargas paralelas | Requiere comandos adicionales | Incorporado |
| Reanudación automática de las descargas | Requiere el indicador -C | Incorporado |
| Funciona con API (envío de solicitudes POST, PUT y cabeceras) | Por defecto | Limitado |
| Evitar redireccionamientos | Con el indicador -L | Incorporado |
| Soporte proxy | Por defecto | Por defecto |
| Barra de progreso integrada | Necesita -# bandera | Ausente |
| Operación de fondo | No se admite | Necesita la bandera -b |
| Integración en guiones | Sí (devuelve un código de respuesta) | Limitado |
Wget y cURL también tienen diferencias en la sintaxis de los comandos:
Wget parece haber sido creado principalmente para descargar archivos mientras que cURL fue hecho para interactuar con peticiones HTTP y APIs.
En términos de protocolos soportados, Wget está en desventaja frente a cURL en muchos aspectos.
De hecho, cURL es admirable por su compatibilidad con multitud de protocolos, convenciones de nomenclatura de archivos, uso de proxy y capacidad para reanudar descargas interrumpidas.
cURL es apto no sólo para descargas sencillas integrándose con APIs o para realizar búsquedas masivas de datos. Sin embargo, su capacidad para redirigir, establecer límites de velocidad, autenticar y realizar un seguimiento de la interacción con el servidor, permitir el diagnóstico de la conexión con el servidor y la comprobación de recursos web lo convierten en una gran herramienta multiuso. Y con las flexibles personalizaciones de parámetros que ofrece, cURL puede adaptarse a todas y cada una de las tareas.
Comentarios: 0