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

Contenidos

Una ventana de terminal en un escritorio Linux al estilo de Ubuntu.

El Linux curl El comando puede hacer mucho más que descargar archivos. Averiguar qué curl es capaz de, y cuándo debe usarlo en lugar de wget.

curl vs. wget: ¿Cuál es la diferencia?

Las personas a menudo luchan por identificar las fortalezas relativas de la wget y curl comandos. Los comandos disponen cierta superposición funcional. Cada uno puede recuperar archivos de ubicaciones remotas, pero ahí es donde termina la similitud.

wget es un fantástica herramienta para descargar contenido y archivos. Puede descargar archivos, páginas web y directorios. Contiene rutinas inteligentes para recorrer links en páginas web y descargar contenido de forma recursiva en todo un portal 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 portal web en busca de contenido para recuperar. Qué curl lo que verdaderamente hace es permitirle interactuar con sistemas remotos al realizar solicitudes a esos sistemas y recuperar y mostrar sus respuestas. Esas respuestas pueden ser archivos y contenido de la página web, pero además pueden contener datos proporcionados a través de un servicio web o API como consecuencia de la «pregunta» formulada por la solicitud curl.

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

El autor de curl cuenta con una página web que describe las diferencias que ve Entre curl y wget.

Instalación de curl

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

sudo apt-get install curl

La versión curl

los --version la opción hace curlinformar su versión. Además enumera todos los protocolos que admite.

curl --version

Recuperar una página web

Si apuntamos curl en una página web, lo recuperará por nosotros.

curl https://www.bbc.com

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

Tener cuidado: Si no lo dices curl quiere algo almacenado como un archivo, lo hará siempre volcarlo 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 https://www.bbc.com  > bbc.html

Esta vez no vemos la información recuperada, se envía de forma directa al archivo por nosotros. Debido a que no hay salida de ventana de terminal para mostrar, curl genera un conjunto de información de progreso.

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

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

La información proporcionada es:

  • % Total: La cantidad total que se 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.
  • Descarga de velocidad media: La velocidad de descarga promedio.
  • Carga de velocidad media: La velocidad de carga promedio.
  • Tiempo total: La duración total estimada de la transferencia.
  • Tiempo usado: El tiempo transcurrido hasta ahora para esta transferencia.
  • Tiempo restante: El tiempo estimado que queda para que se complete la transferencia.
  • Velocidad actual: La velocidad de transferencia actual para esta transferencia.

Debido a que redirigimos la salida de curl a un archivo, ahora tenemos un archivo llamado «bbc.html».

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

La página web recuperada se muestra en una ventana del navegador.

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

No tenemos que redireccionar la salida para crear un archivo. Podemos crear un archivo usando el -o (salida) opción, y diciendo curl para crear el archivo. Aquí estamos usando el -o y proporcionando el nombre del archivo que anhelamos crear «bbc.html».

curl -o bbc.html https://www.bbc.com

Uso de una barra de progreso para monitorear descargas

Para que la información de descarga basada en texto sea reemplazada por una barra de progreso simple, use el -# (barra de progreso) opción.

curl -x -o bbc.html https://www.bbc.com

Reinicio de una descarga interrumpida

Es fácil reiniciar una descarga que se ha terminado o interrumpido. Comencemos la descarga de un archivo considerable. Usaremos la última compilació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 anhelamos guardarlo: «ubuntu180403.iso».

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

La descarga comienza y avanza hacia su finalización.

Progreso de una gran descarga en una terminal widnow

Si interrumpimos a la fuerza la descarga con Ctrl+C , volvemos al símbolo del sistema y se abandona la descarga.

Para reiniciar la descarga, use el -C (continuar en) opción. Esto causa curl para reiniciar la descarga en un punto especificado o compensar dentro del archivo de destino. Si utiliza un guion - como el desplazamiento, curl mirará la parte ya descargada del archivo y determinará el desplazamiento correcto para utilizar por sí mismo.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

Se reinicia la descarga. curl informa el desplazamiento en el que se está reiniciando.

Recuperando encabezados HTTP

Con el -I (head), solo puede recuperar los encabezados HTTP. Esto es lo mismo que enviar el Comando HTTP HEAD a un servidor web.

curl -I www.twitter.com

Este comando solo recupera información; no descarga páginas web ni archivos.

Descarga de varias URL

Usando xargs podemos descargar varios URLs En seguida. Tal vez queramos descargar una serie de páginas web que componen un solo post o tutorial.

Copie estas URL en un editor y guárdelas en un archivo llamado «urls-to-download.txt». Nosotros podemos utilizar xargs para tratar el contenido de cada línea del archivo de texto como un parámetro que alimentará a curl, Sucesivamente.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

Este es el comando que debemos utilizar para tener xargs pasar estas URL a curl uno al mismo tiempo:

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 una «O» mayúscula. Esta opción provoca curl para guardar el archivo recuperado con el mismo nombre que tiene el archivo en el servidor remoto.

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

Cuando ejecute el comando, verá que varias descargas comienzan y terminan, 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 sin el navegador de archivos nautilus

RELACIONADO: Cómo utilizar el comando xargs en Linux

Descarga de archivos desde un servidor FTP

Usando curl con un Protocolo de transferencia de archivos (FTP) es fácil, inclusive si tiene que autenticarse con un nombre de usuario y contraseña. Para pasar un nombre de usuario y contraseña con curl usar el -u (usuario) y escriba el nombre de usuario, dos puntos “:” y la contraseña. No ponga un espacio antes o después del colon.

Este es un servidor FTP sin costes alojado por Rebex. El sitio FTP de prueba tiene un nombre de usuario preestablecido de «demostració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 de producción o «real».

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

curl se da cuenta de que lo estamos apuntando a un servidor FTP y devuelve una lista de los archivos que están presentes en el servidor.

El único archivo en este servidor es un archivo «readme.txt», de 403 bytes de longitud. Vamos a recuperarlo. Utilice el mismo comando que hace un momento, con el nombre de archivo adjunto:

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

El archivo se recupera y curl muestra su contenido en la ventana del 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

El archivo se recupera y se guarda en el disco. Nosotros podemos utilizar ls para chequear 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

RELACIONADO: Cómo usar el comando FTP en Linux

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 pueden usarse para formatear los datos devueltos, a modo de ejemplo, o pueden usarse para elegir los datos exactos que el usuario desea recuperar. A menudo es factible interactuar con la web. interfaces de programación de aplicaciones (API) usando curl.

Como un simple ejemplo, el ipificar El portal web cuenta con una API que se puede consultar para establecer su dirección IP externa.

curl https://api.ipify.org

Añadiendo el format parámetro al comando, con el valor de «json» podemos volver a solicitar nuestra dirección IP externa, pero esta vez los datos devueltos serán codificados en el Formato JSON.

curl https://api.ipify.org?format=json

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 International Standard Book Number (ISBN) número de un libro. Puede encontrarlos en la contraportada de la mayoría de los libros, de forma general debajo de un código de barras. El parámetro que usaremos aquí es «0131103628».

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

Los datos devueltos son completos:

A veces rizo, a veces wget

Si quisiera descargar contenido de un portal web y hacer que la estructura de árbol del portal web buscara de forma recursiva ese contenido, 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 no admitidos por wget.

setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.