CodeGym /Cursos /Docker SELF /Uso de `curl` y `wget` para descargar archivos

Uso de `curl` y `wget` para descargar archivos

Docker SELF
Nivel 8 , Lección 4
Disponible

Uso de curl y wget para descargar archivos

1. Introducción a curl

¿Alguna vez te has encontrado en una entrevista donde te piden descargar un archivo de internet desde el terminal, y te quedas viendo la pantalla sin saber cómo hacerlo? Hoy aprenderemos a usar curl y wget, que serán tus compañeros fieles para trabajar con datos de red.

Estas herramientas te permiten descargar páginas web, bajar archivos, enviar solicitudes HTTP, trabajar con API e incluso ejecutar scripts de automatización. Vamos a desglosar su funcionalidad, ventajas y escenarios típicos de uso.

curl es una herramienta de línea de comandos para transferir datos a través de protocolos de red. La mayor fortaleza de curl radica en su flexibilidad: soporta más de 20 protocolos (HTTP, HTTPS, FTP, SCP e incluso SMTP). Según los desarrolladores, es una excelente "navaja suiza" para trabajar con Internet.

Sintaxis básica de curl

curl [opciones] URL

En pocas palabras, escribes el comando curl, indicas la URL necesaria y disfrutas del resultado. Vamos a ver cómo funciona.

Descargar una página web

Supongamos que deseas descargar la página principal de Google. Esto se hace así:

curl http://www.google.com

En la pantalla verás el código HTML de la página. Es bastante útil si quieres investigar la estructura de un sitio o automatizar algo relacionado con él.

Guardar el contenido en un archivo

Si todo ese flujo de texto te incomoda, puedes guardar el resultado en un archivo:

curl -o google.html http://www.google.com

La bandera -o (output) le dice a curl que queremos redirigir la salida a un archivo. Ahora el código HTML de la página se guarda en google.html. ¿Quieres reírte? Dale el archivo a un amigo y dile que descargaste "todo el Internet".

Descargar un archivo

Imagina que necesitas descargar un archivo de Internet (por ejemplo, un .zip). En esto, curl es excelente:

curl -O http://example.com/file.zip

A diferencia de -o, la bandera -O guarda el archivo con su nombre original indicado en la URL. Es útil si estás descargando múltiples archivos de una misma fuente.

Autenticación HTTP

En ocasiones, el acceso a un archivo o recurso API está protegido por un usuario y contraseña. En este caso, usa curl con la bandera -u:

curl -u username:password http://example.com/private-data

Esto es especialmente útil para trabajar con API privadas, como GitHub o Docker Registry.

Descargar a través de API

Una de las capacidades más geniales de curl es trabajar con APIs. Supongamos que necesitas enviar una solicitud al servidor que devuelve datos en formato JSON:

curl -X GET "https://api.exchangerate-api.com/v4/latest/USD"

Aquí la bandera -X especifica el método de la solicitud HTTP (GET, POST, DELETE, etc.). Para la automatización de integraciones con servicios externos, es simplemente una joya.


2. ¿Qué es wget?

Si curl es como una navaja suiza, entonces wget es como un bulldozer. Su principal objetivo es descargar archivos. La gran diferencia con curl es que wget está especialmente diseñado para descargar archivos grandes de forma confiable y además soporta reanudar descargas, lo cual es súper útil cuando la conexión es mala.

Sintaxis básica de wget

wget [opciones] URL

Descarga simple de un archivo

wget http://example.com/file.zip

Este comando descargará el archivo y lo guardará con su nombre original en el directorio actual. Simple y eficiente.

Guardar con otro nombre

Si no te gusta el nombre original del archivo, puedes darle uno nuevo:

wget -O newfile.zip http://example.com/file.zip

Reanudar descargas

Supongamos que estás descargando un archivo enorme, pero la conexión se interrumpe. No hay problema: solo usa la bandera -c (continue):

wget -c http://example.com/largefile.iso

wget continuará la descarga desde donde se detuvo. Y esto incluso funciona después de varios días si el servidor soporta este modo.

Descarga de un sitio completo

Sí, con wget puedes descargar un sitio completo (o una copia del mismo). Simplemente usa la opción --mirror:

wget --mirror http://example.com

Este comando descargará el sitio conservando la estructura de directorios. Ahora tienes un "espejo" del sitio para usar en modo offline.


3. Comparación de curl y wget

Función curl wget
Soporte para un gran número de protocolos Solo HTTP/HTTPS y FTP
Reanudación automática de descargas No (se puede hacer con scripts)
Trabajo con APIs No
Facilidad de manejo de archivos Media Excelente
Descarga de sitios completos No

En general, si necesitas trabajar con APIs o algo específico, usa curl. Pero si necesitas descargar archivos, wget será la mejor opción.


4. Aplicación práctica

Descarga y procesamiento de un archivo

Combinemos wget y nuestras habilidades para trabajar con texto:

wget -O data.txt http://example.com/data.txt
cat data.txt | grep "keyword" | awk '{print $2, $4}'

Aquí descargamos un archivo, filtramos las líneas por palabra clave y extraímos las columnas necesarias.

Trabajo con API

Descargamos tipos de cambio utilizando curl y encontramos la moneda que necesitamos:

curl -s "https://api.exchangerate-api.com/v4/latest/USD" | grep "EUR"

Esto es útil si deseas construir un sistema automatizado de cambio de divisas.

Automatización de actualizaciones

Imagina que necesitas descargar actualizaciones de un archivo todos los días. Aquí tienes un ejemplo de script sencillo:

#!/bin/bash
wget -O updates.zip http://example.com/daily-updates.zip
unzip -o updates.zip -d /path/to/updates

Guardamos el script y lo añadimos a cron. Ahora se ejecutará automáticamente — chévere, ¿no?


5. Errores típicos y particularidades

Error 403 (Prohibido):

Esto pasa si el servidor requiere encabezados adicionales (por ejemplo, User-Agent). Se soluciona así:

curl -A "Mozilla/5.0" http://example.com

Redirecciones:

Si el servidor te redirige a otra URL, agrega el flag -L en curl:

curl -L http://example.com

Errores SSL:

A veces wget o curl pueden quejarse sobre SSL. Puedes desactivar la verificación del certificado (¡pero no es seguro!):

wget --no-check-certificate https://example.com
curl -k https://example.com

Con este arsenal poderoso ya estás listo para conquistar internet desde el terminal. Ahora ningún archivo o API escapará de ti — ¡es hora de descargar, procesar y automatizar!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION