Ir al contenido principal

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

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

curlvs. Wget: ¿Cuál es la diferencia?

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

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

curl satisface una necesidad completamente diferente.Sí, puede recuperar archivos, pero no puede navegar recursivamente en un sitio web buscando contenido para recuperar. Lo que curl realmente hace es permitirle interactuar con sistemas remotos al hacer solicitudes a esos sistemas y recuperar y mostrar sus respuestas. Esas respuestas podrían ser contenido 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 “ pregunta ”preguntado por la solicitud curl.

Y curl no está limitado a sitios web. curl admite más de 20 protocolos, incluidos HTTP, HTTPS, SCP, SFTP y FTP.Y podría decirse que, 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 tiene una página web que describe las diferencias que ve entre curl y wget.

Instalación de curl

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

 sudo apt-get install curl 

La versión curl

La opción --version hace que curlreport sea su versión. También enumera todos los protocolos que admite.

 curl --version 

Recuperando una página web

Si señalamos curl a una página web, la recuperará por nosotros.

 curl https://www. bbc. com 

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

Cuidado: si no le dices a curl que quieres algo almacenado como un archivo, siempre lo volcará a la ventana de 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 byte en el archivo binario como caracteres de control o secuencias de escape.

Guardando datos en un archivo

Deje que el curl se redirijala salida en un archivo:

 curl https://www. bbc. com >bbc. html 

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

No hizo esto en el ejemplo anterior porque la información de progreso se habría dispersado por toda la fuente de la página webcódigo, por lo que 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.

La información proporcionada es:

  • % Total: la cantidad total que se debe recuperar.
  • % recibido: el porcentaje y los valores reales de los datos recuperadoshasta ahora.
  • % Xferd: El porcentaje y el envío real, si se están cargando datos.
  • Descarga de velocidad promedio: La velocidad de descarga promedio.
  • Velocidad promedioCarga: La velocidad de carga promedio.
  • Tiempo total: La duración total estimada de la transferencia.
  • Tiempo empleado: El tiempo transcurrido hasta ahora para esta transferencia.
  • Tiempo restante: el tiempo estimado restante para que se complete la transferenciaete
  • 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.

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

No tenemos que redirigir la salida para crear un archivo. Podemos crear un archivo usando la opción -o (salida) y diciéndole a curl que cree el archivo. Aquí estamos usando la opción -o y proporcionando el nombre del archivo que deseamos crear “ bbc. html. ”

 curl -o bbc. htmlhttps://www. bbc. com 

Uso de una barra de progreso para monitorear descargas

Para reemplazar la información de descarga basada en texto por una simplebarra de progreso, use la opción - # (barra de progreso).

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

Reinicio de una descarga interrumpida

Es fácil reiniciar una descarga que ha finalizado o interrumpido. Comencemos a descargar un archivo de tamaño considerable. Usaremos la última compilación de soporte a largo plazo de Ubuntu 18.04. Estamos usando la opción --output para especificar el nombre del archivo en el que deseamos guardarlo: “ ubuntu180403. iso. ”

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

La descarga comienza y funcionacamino hacia la finalización.

Si interrumpimos por la fuerza la descarga con Ctrl + C, volveremos al símbolo del sistema y la descarga se abandonará.

Para reiniciar la descarga, use la opción -C (continuar en). Esto hace que curl reinicie la descarga en un punto específico o se desplace dentro del archivo de destino. Si usa un guión, como desplazamiento, curl examinará la parte del archivo ya descargada y determinará el desplazamiento correcto para usarlo por sí mismo.

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

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

Recuperando encabezados HTTP

Con la opción -I (encabezado), puede recuperar los encabezados HTTPsolamente. Esto es lo mismo que enviar el comando HTTP HEAD a un servidor web.

 curl -I www. twitter. com 

Este comandosolo recupera información;no descarga ninguna página web o archivo.

Descarga de múltiples URL

Usando xargs podemos descargar múltiples URL a la vez. Tal vez queremos descargar una serie de páginas web que componen un solo artículo o tutorial.

Copie estas URL en un editor y guárdelas en un archivo llamado “ urls-to-download. txt. ”Podemos usar xargs para tratar el contenido de cada línea del archivo de texto como un parámetro que alimentará para curvar, a su vez.

 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 usar para que los xargs pasen estos URL para curvar uno a la vez:

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

Tenga en cuenta que este comando usa el comando de salida -O (archivo remoto), que usa mayúsculas “ O. ”Esta opción hace que curl guarde el archivo recuperado con el mismo nombre que el archivo tiene en el servidor remoto.

La opción -n 1 le dice a xargs que trate cada línea del archivo de texto como un único parámetro.

Cuando ejecuta el comando, verá &’ verá que las descargas múltiples comienzan y finalizan, una tras otra.

La comprobación en el navegador de archivos muestraLos múltiples archivos han sido descargados. Cada uno lleva el nombre que tenía en el servidor remoto.

RELACIONADO: Cómo usar el comando xargs en Linux

Descarga de archivos desde un servidor FTP

Usar curl con un servidor de Protocolo de transferencia de archivos (FTP) es fácil, incluso si tiene que autenticarse con un nombre de usuario y contraseña. Para pasar un nombre de usuario y una contraseña con curl, use la opción -u (usuario) y escriba el nombre de usuario, dos puntos “: ”, y la contraseña. No coloque 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 preestablecido de “ demo ”, y la contraseña es “ contraseña. ”No use este tipo de nombre de usuario y contraseña débiles en una producción o “ real ”Servidor FTP.

 curl -u demo: contraseña ftp://test. rebex. net 

curl descubre que lo estamos apuntando a un FTPservidor, y devuelve una lista de los archivos que están presentes en el servidor.

El único archivo en este servidor es un “ readme. txt ”archivo, 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: contraseña 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ásconveniente tener el archivo recuperado guardado en el disco para nosotros, en lugar de mostrarlo en la ventana del terminal. Una vez más, podemos usar el comando de salida -O (archivo remoto) para guardar el archivo en el disco, con el mismo nombre de archivo que tiene en el servidor remoto.

 curl -O -u demo: contraseña ftp://test. rebex. net/readme. txt

El archivo se recupera y se guarda en el disco. Podemos usar ls para verificar 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, por ejemplo, o pueden usarse para seleccionar los datos exactos que el usuario desea recuperar.A menudo es posible interactuar con las interfaces de programación de aplicaciones web (API) utilizando curl.

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

 curl https://api. ipify. org 

Al agregar el parámetro de formato al comando, con el valor de “ json ”nuevamente podemos solicitar nuestra dirección IP externa, pero esta vez los datos devueltos se codificarán en 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 número de libro internacional estándar (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 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 sitio web y hacer que la estructura de árbol del sitio web buscara ese contenido de forma recursiva, usaría wget.

Si quisiera interactuar con un servidor remoto o APIy posiblemente descargue algunos archivos o páginas web, usaría curl. Especialmente si el protocolo era uno de los muchos no soportados por wget.

Fuente: How to Geek

Comentarios

Entradas populares de este blog

Cómo usar el comando Echo en Linux

El comando echo es perfecto para escribir texto formateado en la ventana del terminal.Y no tiene que ser texto estático. Puede incluir variables de shell, nombres de archivo y directorios. También puede redirigir echo para crear archivos de texto y archivos de registro. Siga esta sencilla guía para descubrir cómo. Echo repite lo que le dice que repita A Zeus le gustaba abandonar el Olimpo para asociarse con hermosas ninfas. En un viaje, le dijo a una ninfa de la montaña llamada Echo que matara a su esposa, Hera, si ella lo seguía. Hera vino a buscar a Zeus, y Echo hizo todo lo que pudo para mantener a Hera en conversación. Finalmente, Hera perdió los estribos y maldijo al pobre Echo para que solo repitiera las últimas palabras que alguien más había dicho. Lo que Hera le hizo a Zeus cuando lo alcanzó es la suposición de nadie. Y eso, más o menos, es mucho eco en la vida. Repite lo que se le ha dicho que repita. Esa es una función simple, pero vit...

¿Qué son stdin, stdout y stderr en Linux?

stdin, stdout y stderr son tres flujos de datos creados al iniciar un comando de Linux. Puede usarlos para saber si sus scripts se están canalizando o redirigiendo. Le mostramos cómo. Streams Unir dos puntos Tan pronto como Cuando comienzas a aprender sobre Linux y sistemas operativos tipo Unix, te encontrarás con los términos stdin, stdout y stederr. Estas son tres secuencias estándar que se establecen cuando se ejecuta un comando de Linux. En informática, un flujo es algo que puede transferir datos. En el caso de estas corrientes, esos datos son texto. Las corrientes de datos, como las corrientes de agua, tienen dos extremos. Tienen una fuente y un flujo de salida. Cualquiera que sea el comando de Linux que esté utilizando, proporciona un extremo de cada transmisión. El otro extremo está determinado por el shell que lanzó el comando. Ese extremo estará conectado a la ventana del terminal, conectado a una tubería o redirigido a un archivo u otro...

Cómo usar el comando rev en Linux

El comando rev de Linux invierte las cadenas de texto. Este comando puede operar en el texto proporcionado o en un archivo, y parece ser aparentemente simple. Pero al igual que muchas utilidades de la línea de comandos, su poder real se hace evidente cuando lo combinas con otros comandos. El comando rev es una de esas sencillas utilidades de Linux que, a primera vista, parece ser una especie de rareza. Realiza una sola función: invierte cadenas. Y aparte de poder imprimir una página de ayuda rápida (-h) y mostrarle su número de versión (-V), no acepta ninguna opción de línea de comandos. Por lo tanto, rev invierte cadenas, ¿y eso es? ¿No hay variaciones u opciones? Pues sí y no. Sí, no tiene permutaciones, pero no, eso no es todo. Este tutorial le muestra cómo combinarlo para operaciones poderosas. Cuando usa rev como un bloque de construcción en secuencias de comandos más complicadas, realmente comienza a mostrar su valor. rev es uno de un grupo de...