Te enseño cómo usar el comando curl para subir y descargar archivos. Los comandos de ejemplos funcionan tanto para Linux como para Windows 7/8/10.
Si estás considerando escribir un script que requiera descargar (o cargar) archivos a través de una red, una de tus mejores opciones será el comando cURL.
1. Qué es cURL
cURL es un proyecto de software que proporciona una biblioteca y una herramienta de línea de comandos para transferir datos usando varios protocolos.
El comando curl es bastante útil y flexible. El objetivo de la herramienta es transferir datos, sin interacción del usuario, hacia o desde un servidor, utilizando uno de los muchos protocolos admitidos. Es esa lista de protocolos que ayuda a curl a ser tan flexible. CURL es simplemente increíble por las siguientes razones …
- Compatible con casi todos los protocolos principales: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET y TFTP.
- Tiene alrededor de 120 opciones de línea de comando para varias tareas.
- Se ejecuta en todos los principales sistemas operativos (más de 40 sistemas operativos).
- Admite cookies, formularios y SSL.
- Admite archivos de configuración.
- Carga múltiple con un solo comando.
- Barra de progreso, limitación de velocidad y detalles del tiempo de descarga.
- Soporte IPV6.
Curl puede transferir casi cualquier tipo de datos e incluso puede mostrar el código fuente de una URL. Todo esto sin requerir la interacción del usuario (una característica crucial para la creación de scripts).
Quiero mostrarte cómo hacer uso de este comando (uno que encontrará con frecuencia en muchos artículos y scripts de Linux). Lo demostraré en el sistema operativo Kali Linux, pero el comando funciona en casi todas las distribuciones de Linux disponibles. Curl también está disponible en macOS y Windows para ser ejecutado desde la consola.
2. Instalar curl
Tu distribución de Linux debe tener Curl instalado por defecto. Si no, la instalación es bastante simple. En un derivado de Debian, el comando de instalación sería:
sudo apt install curl
Puede verificar la instalación emitiendo el comando curl –version. Debería ver el número de versión de la aplicación instalada.
- Si utilizas Windows 10 build 17063 o posterior, cUrl está incluido por defecto (comprueba la última versión de Windows aquí). Si no es así, o utilizas Windows 7/8/8.1, puedes instalarlo desde su página oficial:
3. Usos del comando curl
A continuación, veamos cómo usar curl con diferentes parámetros:
3.1. Ver código fuente
Primero veamos cómo se puede usar curl en su forma más simple. Digamos que quiere ver la fuente de un sitio web. Usaremos el sitio curl como un ejemplo. Entonces emita el comando:
#Para Linux
curl https://curl.haxx.se | less
#Para Windows
curl https://curl.haxx.se | more
Ahora puede desplazarse por el HTML de ese sitio web.
Esta es una gran manera de descubrir cómo se ha creado un sitio o incluso solucionar sus propios sitios.
3.2. Descargar HTML de un sitio web
Por supuesto, el ejemplo anterior es bastante limitado. Supongamos que desea descargar el HTML del sitio de curl para verlo más tarde. Para esto, usaré el parámetro -o así:
curl https://curl.haxx.se -o curl.html
El comando anterior descargaría el código HTML del sitio curl y lo guardaría como curl.html.
- También podemos guardar el resultado del comando curl en un archivo utilizando el parámetro -O, que tomará el nombre de archivo en la URL y lo usará como nombre de archivo para almacenar el resultado. Así:
curl https://curl.haxx.se/docs/manual.html -O
- Además, podemos descargar varios archivos HTML en un solo comando al especificar las URL en la línea de comando.
curl https://curl.haxx.se/docs/manual.html -O https://curl.haxx.se/docs/faq.html -O
3.3. Descargar archivo de cualquier sitio web
Por supuesto, Curl no solo es capaz de descargar HTML fuente. Supongamos que tiene un archivo que desea descargar de un sitio web. Curl puede manejar esto así:
curl http://DIRECCION_SERVIDOR/NOMBRE_ARCHIVO -o NOMBRE_ARCHIVO
Donde DIRECCION_SERVIDOR es la URL del servidor y NOMBRE_ARCHIVO es el nombre del archivo que se descargará. Digamos, por ejemplo, que desea descargar la última versión de Ubuntu Desktop. Eso se puede hacer así:
curl http://releases.ubuntu.com/bionic/ubuntu-18.04-desktop-amd64.iso -o ubuntu-18.04-desktop-amd64.iso
3.4. cURL para descargar archivo con contraseña
Si ese archivo está protegido por contraseña, Curl puede manejarlo de la siguiente manera:
curl -u USUARIO:CONTRASEÑA http://DIRECCION_SERVIDOR -o NOMBRE_ARCHIVO
Dónde:
- USUARIO es el nombre de usuario en el servidor.
- CONTRASEÑA es la contraseña para el usuario en el servidor.
- NOMBRE_ARCHIVO es el archivo que se descargará.
- DIRECCION_SERVIDOR es el enlace directo al archivo.
3.5. Descargar un archivo desde servidor FTP
También puede usar curl con un servidor FTP. Supongamos que necesita descargar un archivo de un servidor FTP que está protegido por contraseña. El comando para esto sería:
curl ftp://DIRECCION_SERVIDOR/NOMBRE_ARCHIVO -user USUARIO:CONTRASEÑA -o NOMBRE_ARCHIVO
Dónde:
- DIRECCION_SERVIDOR es la dirección del servidor FTP.
- NOMBRE_ARCHIVO es el nombre del archivo que se descargará.
- USUARIO es el nombre de usuario en el servidor FTP.
- CONTRASEÑA es la contraseña para el usuario en el servidor FTP.
3.6. Cargar un archivo a un servidor FTP
Para cargar un archivo a un servidor FTP, el comando sería:
curl -T NOMBRE_ARCHIVO DIRECCION_SERVIDOR -user USUARIO:CONTRASEÑA
Nuevamente, donde:
- DIRECCION_SERVIDOR es la dirección del servidor FTP.
- NOMBRE_ARCHIVO es el nombre del archivo que se descargará.
- USUARIO es el nombre de usuario en el servidor FTP.
- CONTRASEÑA es la contraseña para el usuario en el servidor FTP.
3.7. Enviar correo usando el protocolo SMTP
cURL también se puede usar para enviar correo utilizando el protocolo SMTP. Al menos en teoría, este truco lo encontré aquí, pero no he logrado que funcione. Por alguna razón Gmail me impide enviar un mensaje, igual se los dejo:
Debe especificar la dirección de origen (EMAIL_ORIGEN), dirección de destino (EMAIL_DESTINO) y la dirección IP del servidor de correo (DIRECCION_SERVIDOR) como se muestra a continuación:
curl -n --ssl-reqd --mail-from "EMAIL_ORIGEN" --mail-rcpt "EMAIL_DESTINO" --url smtps://smtp.gmail.com:465 -u 'EMAIL_ORIGEN:CONTRASEÑA' -T mail.txt
Dentro del archivo mail.txt deberá escribir lo siguiente:
From: "Nombre" <EMAIL_ORIGEN>
To: "Otro Nombre" <EMAIL_DESTINO>
Subject: Asunto
Hola,
Cuerpo del mensaje.
Bye!
4. Conclusión
¿Por qué usar curl?
Uno de los mayores beneficios de curl es que puede usarse sin interacción. Por eso, es perfectamente adecuado para secuencias de comandos (scripting). Te encontrarás con muchas instancias de scripts de instalación de Linux que hacen uso de curl. A medida que se ejecuta un script de instalación, es posible que vea cómo curl hace lo suyo descargando las dependencias necesarias.
Así que si estás escribiendo un script para Linux bash, curl seguramente será tu amigo. Para obtener más información sobre curl (y hay mucho de él), emita el comando man curl (Linux) o curl -help (Windows) o lea la página oficial del manual de curl. ¡Si te ha gustado, por favor, comparte!