Cómo usar curl para descargar archivos desde la línea de comandos de Linux

linux curl El comando puede hacer mucho más que descargar archivos. Averiguar qué curl ¿Es capaz y cuándo debería usarlo en lugar de? wget.

→ Índice de contenidos

rizo vs. wget: ¿cuál es la diferencia?

Las personas a menudo tienen dificultades para identificar las fortalezas relativas. wget Y curl comandos. Los comandos tienen cierta superposición funcional. Cada uno de ellos puede recuperar archivos de ubicaciones remotas, pero ahí termina la similitud.

wget Es una herramienta fantástica para descargar contenidos y archivos. Puede descargar archivos, páginas web y directorios. Contiene rutinas inteligentes para recorrer enlaces en páginas web y descargar contenido de forma recursiva en todo un sitio web. Es insuperable como administrador de descargas de línea de comandos.

curl satisface una necesidad completamente diferente. Sí, puede recuperar archivos, pero no puede navegar de forma recursiva por un sitio web en busca de contenido para recuperar. Qué curl en realidad, le permite interactuar con sistemas remotos realizando solicitudes a esos sistemas y recuperando y viendo sus respuestas. Dichas respuestas podrían ser contenidos y archivos de páginas web, pero también pueden contener datos proporcionados a través de un servicio web o API como resultado de la "pedido" planteado por la solicitud de rizo.

Y curl no se limita a sitios web. curl admite más de 20 protocolos, incluidos HTTP, HTTPS, SCP, SFTP y FTP. Y probablemente, gracias a su manejo superior de canalizaciones de Linux, curl se puede integrar más fácilmente con otros comandos y scripts.

El autor de curl tiene una página web que describe las diferencias que ve entre curl Y wget.

Cómo instalar rizo

Entre las computadoras utilizadas para investigar este artículo, Fedora 31 y Manjaro 18.1.0 tenían curl ya instalado. curl tenía que instalarse en Ubuntu 18.04 LTS. En Ubuntu, ejecute este comando para instalarlo:

sudo apt-get install curl

La versión rizada

EL --version la opción lo hace curlreporte su versión. También enumera todos los protocolos admitidos.

curl --version

curl --version en una ventana de terminal

Recuperar una página web con curl

si indicamos curl en una página web, lo recuperará por nosotros.

curl 

curl en una ventana de terminal

Pero su acción predeterminada es descargarlo en la ventana de la terminal como código fuente.

Salida curl que muestra el código fuente de la página web en una ventana de terminal

Si no lo dices
curl
Si desea almacenar algo como un archivo, siempre lo descargará en la ventana de la terminal. Si el archivo que está recuperando es un archivo binario, el resultado puede ser impredecible. El shell puede intentar interpretar algunos de los valores de bytes en el archivo binario como caracteres de control o secuencias de escape.

Guardar datos en un archivo

Digamos a curl que redirija la salida a un archivo:

curl  > bbc.html

curl > bbc.html en una ventana de terminal

Esta vez no vemos la información recuperada, se envía directamente al archivo por nosotros. Dado que no hay ninguna salida de ventana de terminal para mostrar, curl emite una serie de informaciones sobre el progreso.

No hizo esto en el ejemplo anterior porque la información de progreso habría estado dispersa por todo el código fuente de la página web, entonces curl lo suprimió automáticamente.

En este ejemplo, curl detecta que la salida se redirige a un archivo y que es seguro generar la información de progreso.

medidor de progreso de descarga curl en una ventana de terminal

La información proporcionada es:

  • % Total: El importe total a recuperar.
  • % Recibió: El porcentaje y los valores reales de los datos recuperados hasta el momento.
  • %Xferd: El porcentaje y el envío real, si se están cargando datos.
  • Carga de velocidad media: La velocidad de descarga promedio.
  • Carga a velocidad media: La velocidad de carga promedio.
  • Tiempo Total: La duración total estimada de la transferencia.
  • El tiempo dedicado a: El tiempo dedicado hasta el momento a esta transferencia.
  • Tiempo restante: El tiempo estimado que queda para que se complete la transferencia.
  • Velocidad actual: La tasa de bits actual para esta transferencia.

Porque redirigimos la salida de curl en un archivo, ahora tenemos un archivo llamado "bbc.html".

Archivo bbc.html creado por curl.

Al hacer doble clic en ese archivo se abrirá su navegador predeterminado para que se muestre la página web recuperada.

Página web recuperada mostrada en una ventana del navegador.

Tenga en cuenta que la dirección en la barra de direcciones de su navegador es un archivo local en esta computadora, no un sitio web remoto.

No es necesario redirigir la salida para crear un archivo. Podemos crear un archivo usando el archivo. -o (salida) opción y descripción curl para crear el archivo. Aquí estamos usando el -o opción y proporcionando el nombre del archivo que queremos crear "bbc.html".

curl -o bbc.html 

curl -o bbc.html en una ventana de terminal

Usar una barra de progreso para realizar un seguimiento de las descargas

Para reemplazar la información de descarga basada en texto con una simple barra de progreso, use el -# (barra de progreso).

curl -x -o bbc.html 

curl -x -o bbc.html en una ventana de terminal

Reiniciar una descarga interrumpida

Es fácil reiniciar una descarga que finalizó o se interrumpió. Comencemos a descargar un archivo de tamaño considerable. Usaremos la última versión de soporte a largo plazo de Ubuntu 18.04. Estamos usando el --output Opción para especificar el nombre del archivo en el que queremos guardarlo: "ubuntu180403.iso."

curl --output ubuntu18043.iso 

curl --salida ubuntu18043.iso en una ventana de terminal

La descarga comienza y continúa hasta completarse.

Progresando una descarga grande en una ventana de terminal

Si detenemos la descarga a la fuerza con Ctrl+C Volvemos al símbolo del sistema y se abandona la descarga.

Para reiniciar la descarga, utilice el -C (continuar) opción. Esto causa curl para reiniciar la descarga en un punto específico o desplazamiento dentro del archivo de destino. Si usas un guión - como compensación, curl examinará la parte ya descargada del archivo y determinará el desplazamiento correcto a utilizar.

curl -C - --output ubuntu18043.iso 

curl -C - --output ubuntu18043.iso en una ventana de terminal

La descarga se reinicia. curl informa el desplazamiento en el que se reinicia.

curl -C - --output ubuntu18043.iso en una ventana de terminal

Con el -I (head), solo puede recuperar encabezados HTTP. Equivale a enviar el comando HTTP HEAD a un servidor web.

curl -I www.twitter.com

curl -I www.twitter.com en una ventana de terminal

Este comando sólo recupera información; No descarga páginas web ni archivos.

Salida de curl -I www.twitter.com en una ventana de terminal

Descargar varias URL

Usando xargs Podemos descargar varias URL al mismo tiempo. Quizás queramos descargar una serie de páginas web que conforman un único artículo o tutorial.

Copie estas URL en un editor y guárdelas en un archivo llamado "URL para descargar.txt". Nosotros podemos usar xargs tratar el contenido de cada línea del archivo de texto como un parámetro al que se alimentará curlSucesivamente.



Este es el comando que necesitamos usar para obtener xargs pasar estas URL a curl uno a uno:

xargs -n 1 curl -O < urls-to-download.txt

Tenga en cuenta que este comando utiliza el -O (archivo remoto) comando de salida, que utiliza un "O" capital. Esta opción provoca curl para guardar el archivo recuperado con el mismo nombre de archivo en el servidor remoto.

EL -n 1 la opción dice xargs para tratar cada línea del archivo de texto como un único parámetro.

Cuando ejecute el comando, verá el inicio y el final de varias descargas, una tras otra.

Salida de xargs y curl descargando varios archivos

Verificar en el explorador de archivos muestra que se han descargado varios archivos. Cada uno lleva el nombre que tenía en el servidor remoto.

archivo descargado desde el explorador de archivos nautilus

Descargar archivos desde un servidor FTP

Usando curl con un servidor FTP (Protocolo de transferencia de archivos) es sencillo, aunque es necesario autenticarse con un nombre de usuario y contraseña. Para pasar un nombre de usuario y contraseña con curl Utilizar el -u (usuario) y escriba el nombre de usuario, dos puntos ":" y la contraseña. No inserte un espacio antes o después de los dos puntos.

Este es un servidor FTP gratuito para pruebas alojado por Rebex. El sitio FTP de prueba tiene un nombre de usuario predeterminado "manifestación" y la contraseña es "contraseña". No utilice este tipo de nombre de usuario y contraseña débiles en un servidor FTP o de producción. "real".

curl -u demo:password ftp://test.rebex.net

curl -u demo:contraseña ftp://test.rebex.net en una ventana de terminal

curl entiende que lo estamos dirigiendo a un servidor FTP y devuelve una lista de los archivos en el servidor.

Lista de archivos en un servidor FTP remoto en una ventana de terminal

El único archivo en este servidor es un archivo "Léame.txt", 403 bytes de longitud. Recuperémoslo. Utilice el mismo comando que el anterior, con el nombre del archivo agregado:

curl -u demo:password ftp://test.rebex.net/readme.txt

curl -u demo:contraseña ftp://test.rebex.net/readme.txt en una ventana de terminal

El archivo se recupera y curl muestra su contenido en la ventana de terminal.

El contenido de un archivo recuperado de un servidor FTP mostrado en una ventana de terminal

En casi todos los casos, será más conveniente guardar el archivo recuperado en el disco, en lugar de mostrarlo en la ventana del terminal. Una vez más podemos utilizar el -O (archivo remoto) comando de salida para guardar el archivo en el disco, con el mismo nombre de archivo que tiene en el servidor remoto.

curl -O -u demo:password ftp://test.rebex.net/readme.txt

curl -O -u demo:contraseña ftp://test.rebex.net/readme.txt en una ventana de terminal

El archivo se recupera y se guarda en el disco. Nosotros podemos usar ls para comprobar los detalles del archivo. Tiene el mismo nombre que el archivo en el servidor FTP y tiene la misma longitud, 403 bytes.

ls -hl readme.txt

ls -hl readme.txt en una ventana de terminal

Envío de parámetros a servidores remotos

Algunos servidores remotos aceptarán parámetros en las solicitudes que se les envíen. Los parámetros podrían usarse para formatear los datos devueltos, por ejemplo, o podrían usarse para seleccionar los datos exactos que el usuario desea recuperar. A menudo puede interactuar con interfaces de programación de aplicaciones web (API) utilizando curl.

Como ejemplo simple, el sitio web ipify tiene una API que se puede consultar para determinar su dirección IP externa.

curl 

Al agregar el format parámetro al comando, con el valor "json" Podemos volver a solicitar nuestra dirección IP externa, pero esta vez los datos devueltos estarán codificados en formato JSON.

curl ?format=json

curl en una ventana de terminal

Aquí hay otro ejemplo que utiliza una API de Google. Devuelve un objeto JSON que describe un libro. El parámetro que debe proporcionar es el Número de libro estándar internacional (ISBN) de un libro. Puede encontrarlos en la contraportada de la mayoría de los libros, generalmente debajo de un código de barras. El parámetro que usaremos aquí es "0131103628".

curl 

curl en una ventana de terminal

Los datos devueltos están completos:

Datos de la API de Google Libros mostrados en una ventana de terminal

A veces se curvan, a veces se aprietan.

Si quisiera descargar contenido de un sitio web y hacer que la estructura de árbol del sitio web busque ese contenido de forma recursiva, usaría wget.

Si quisiera interactuar con un servidor remoto o API y posiblemente descargar algunos archivos o páginas web, usaría curl. Especialmente si el protocolo era uno de los muchos que no eran compatibles. wget.

Subir Change privacy settings