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 | Sí | Solo HTTP/HTTPS y FTP |
Reanudación automática de descargas | No (se puede hacer con scripts) | Sí |
Trabajo con APIs | Sí | No |
Facilidad de manejo de archivos | Media | Excelente |
Descarga de sitios completos | No | Sí |
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!
GO TO FULL VERSION