Cómo usar comando cURL con Ejemplos
Cómo usar comando cURL con Ejemplos

Cómo usar comando cURL con Ejemplos

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.

Descargar cURL para Windows y macOS

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.

Uso de cURL para ver código fuente
Uso de cURL para ver código fuente

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
Comando cURL para descargar archivo sitio web
Comando cURL para descargar archivo sitio web

¡Truco!

Use el parámetro - # para mostrar una barra de progreso en lugar de un medidor de progreso. Para limitar la tasa de transferencia de datos use el parámetro --limit-rate 1000B, donde B significa Bytes/segundo


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!

  1. Buenos días. Tengo una duda y quisiera ver si me podrían dar una manos. Necesito modificar una query que utiliza la sintaxis cURL:

    curl -X POST -H “Content-Type: application/json” http://localhost:8889/XXXX-exports/append

    Lo que necesito es agregarle una nueva acción para que al coemnzar un nuevo mes, envíe el total de .tar generados durante el mes a un path. El problema es que no se como armarlo, ya que no todos los meses tienen 31 días…. y necesita que el primer día del mes, haga el envío de todos los archivos generados durante el mes, tenga 28, 29, 30 o 31 días.
    Pensaba en utilizar -d ‘{“dateFrom”:””,”dateTo”:””}’ pero el problema, como digo, es que no todos los meses tiene la misma cantidad de días.

    Espero puedan darme una mano con esto.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda