Linux en Español

15+ ejemplos para el comando cURL en Linux

En este tutorial, cubriremos el comando cURL en Linux. Acompáñenos mientras lo guiamos a través de las funciones de esta poderosa utilidad con ejemplos que lo ayudarán a entender todo lo que es capaz de hacer.

Puede usar el comando cURL para descargar o subir datos a un servidor, usando uno de sus más de 20 protocolos soportados. Estos datos pueden ser un archivo, un mensaje de correo electrónico o una página web.

 

 

¿Qué es el comando cURL?

cURL es una herramienta ideal para interactuar con un sitio web o un API, enviando peticiones, y mostrando las respuestas a la terminal o ingresando los datos aun archivo. Algunas veces puede utilizarlo como parte de un script más largo, entregando los datos a otras funciones para un procesamiento posterior.

Debido a que el principal uso del cURL es retirar/descargar archivos de los servidores. El realiza esta función muy bien, pero algunas veces el comando wget es mejor para este trabajo.

Revisaremos algunas de las diferencias y semejanzas entre wget y cUrl más Adelante en este artículo.

Te enseñaremos como utilizar cURL en las secciones de abajo.

Descargar un archivo

El comando más básico que podemos darle a cURL es descargar un archivo o un sitio web. cURL utilizara HTTP como su protocolo por defecto a menos que le especifiquemos uno diferente. Para descargar un sitio web, solo emite este comando:

$ curl http://www.google.com

Por supuesto, introduce cualquier sitio web o página que tú quieras retirar.

comando básico curl

Ejecutar un comando básico como este sin ninguna opción extra raramente será útil porque solo le dice a cURL que retire el código Fuente de la página que le has proporcionado.

salida curl

Cuando corremos un comando, nuestra terminal está llena con HTML y otros códigos web scripting- no es algo que sea particularmente útil para nosotros en esta forma.

Vamos a descargar el sitio web como un documento HTML en su lugar, de esa forma el contenido puede ser mostrado. Agrega la -opción de salida al cURL para lograr esto.

$ curl www.likegeeks.com --output likegeeks.html

interruptor de salida curl

Ahora Podemos abrir el sitio web que descargamos y mostrarlo en el buscador web.

sitio web descargado

Si quisieras descargar un archivo en línea, el comando es más o menos el mismo. Pero asegúrate de agregar las -opción de salida a cURL como lo hicimos en el ejemplo anterior.

Si fallas al hacer esto, cURL enviara una salida binaria del archivo en línea a tu terminal, lo que seguramente originara que no funciones correctamente.

Aquí esta como se ve cuando iniciamos la descarga de un documento Word de 500KB.

documento de descarga de curl

El documento Word comienza a descargar, y se muestra el progreso de la descarga en la terminal. Cuando la descarga se complete, el archivo estará disponible en el directorio en el que lo guardamos.

En este ejemplo, no especificamos un directorio, por lo que el archivo fue guardado en nuestro directorio de trabajo actual (el directorio desde el que ejecutamos el comando cURL).

Además, Notaste la opción -L que especificamos en nuestro comando cURL. Fue necesario para descargar este archivo, y revisaremos esta función en la próxima sección.

Seguir el redireccionamiento

Si estas obteniendo una salida en blanco cuando estas intentando utilizar el comando cURL en un sitio web, probablemente significa que el sitio web le dijo al cURL que se redireccionara a una URL diferente. Por defecto, cURL, no seguirá el redireccionamiento, pero puedes decirle que lo hagas con el interruptor -L.

$ curl -L www.likegeeks.com

Seguir el redireccionamiento

En nuestra investigación para este artículo, encontramos que era necesario especificar la -L en la mayoría de los sitios web, por lo que debes asegurarte de recordar este pequeño truco. Incluso podrías querer agregarlo a la mayoría de los comandos cURL por defecto.

Pausar y reanudar descargas

Si tu descarga se interrumpe, o si necesitas descargar un archivo más grande pero no quieres hacerlo todo en una sola sesión, cURL proporciona una opción para pausar y reanudar las transferencias.

Para detener la transferencia manualmente, solamente tiene que terminar el proceso de cURL de la misma forma en que tu detendrías casi cualquier proceso ejecutándose actualmente en tu terminal con una combinación crtl+c.

Pausar y reanudar descargas

Nuestra descarga había comenzado, pero fue interrumpida con crtl+c ahora vamos a reanudarla con la siguiente sintaxis:

$ curl -C - example.com/some-file.zip --output MyFile.zip

El interruptor -C es los que resume nuestra transferencia de archivos, pero también nota que existe un guion (-) directamente luego de él. Esto le dice a cURL, que reanude la transferencia del archivo, pero para primero ver la porción que ya se ha descargado para ver el ultimo byte descargado y determinar donde reanudar la descarga.

reanudar la descarga de archivos

Nuestra transferencia del archivo fue reanudada y entonces se procedió a finalizarla exitosamente.

Especificar el tiempo limite

Si quieres que cURL abandone lo que está haciendo luego de una cierta cantidad de tiempo, puedes especificar un tiempo límite en el comando. Esto es especialmente útil porque algunas operaciones en cURL no tienen un tiempo límite por defecto, por lo que se necesita que se especifique uno sino quieres que se cuelgue indefinidamente.

Tú puedes especificar un máximo de tiempo que pasa ejecutando un comando con el interruptor -m cuando el tiempo especificado ha terminado, cURL dejara cualquier cosa que está haciendo, incluso si está en medio de una descarga o carga de un archivo.

cURL espera que ti tiempo máximo sea especificado en segundos, por lo que, para salir luego de un minuto, el comando debe lucir así:

$ curl -m 60 example.com

Otro tipo de tiempo límite que puedes especificar con cURL es la cantidad de tiempo que pasa conectando. Esto ayuda a asegurarse que cURL no pase un tiempo irrazonable tratando de contactar al servidor que esta desconectado o es inalcanzable.

El acepta segundos en el argumento:

$ curl --connect-timeout 60 example.com

 

Utilizar un nombre de usuario y contraseña

Puedes especificar un nombre de usuario y contraseña en un comando cURL con el interruptor -u. por ejemplo, si quieres autenticarte con un Servidor FTP, la sintaxis se parecerá a esto:

$ curl -u username:password ftp://example.com

Utilizar un nombre de usuario y contraseña

Puedes utilizar esto con cualquier protocolo, pero el FTP es frecuentemente utilizado para una transferencia simple de archivo como esta.

Si queremos descargar el archivo mostrado en la captura de pantalla de arriba, solo tenemos que emitir el mismo comando, pero utilizar el camino completo al archivo.

$ curl -u username:password ftp://example.com/readme.txt

descarga de autenticación de curl

Uso de proxis

Es fácil dirigir a cUrl para que utilice un proxy antes de que se conecte a un servidor. cURL esperara un proxy HTTP por defecto a menos que le especifiques otra cosa.

Utiliza el interruptor -x para definir un proxy. Ya que ningún protocolo es especificado en este ejemplo, el cURL asumirá que es un proxy HTTP.

$ curl -x 192.168.1.1:8080 http://example.com

Este comando utilizara 192.168.1.1 en el Puerto 8080 como un proxy para conectarse a ejemplo.com.

Puedes utilizarlo con otros protocolos también. Aquí está un ejemplo de cómo se ve cuando se utiliza un proxy HTTP para un servidor cURL o para uno FTP y retirar un archivo.

$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt

cURL soporta muchos otros tipos de proxis y opciones para utilizar con esos proxis, pero extenderse más estaría más allá del alcance de esta guía. Revisa la página principal de cURL para más información acerca del redireccionamiento proxy. SOCKS proxis, autenticación, etc.

Descargar archivos grandes por partes

Ya te hemos mostrado como puedes detener y reanudar la transferencia de archivos, pero ¿qué pasa si queremos que cURL solo descargue una parte de un archivo? De esa forma, Podemos descargar un archivo grande en múltiples partes.

Es posible descargar sólo ciertas partes de un archivo, en caso de que necesites permanecer bajo un tope de descarga o algo así. Puedes usar la bandera de rango – para lograr esto.

curl range man

Debes escribir el tamaño en bytes. Así que si quisiéramos descargar el último archivo .iso de Ubuntu en trozos de 100 MB, nuestro primer comando se vería así:

$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1

El segundo comando tendría que recoger en el siguiente byte y descargar otro trozo de 100 MB.

$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
$ curl --range 100000000-199999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part2

Repite este proceso hasta que la cURL descargue todos los trozos. El último paso es combinar los trozos en un solo archivo, lo que se puede hacer con el comando cat.

$ cat ubuntu-part? > ubuntu-18.04.3-desktop-amd64.iso

 

Certificado del cliente

Para acceder a un servidor utilizando la autenticación de certificado en lugar de la autenticación básica, puede especificar un archivo de certificado con la opción –cer.

$ curl --cert path/to/cert.crt:password ftp://example.com

cURL tiene muchas opciones para el formato de los archivos de certificados.

Certificado del cliente

También hay más opciones relacionadas con los certificados: –certificado, –cert-estatus, –cert-tipo, etc. Consulte la página de manual para obtener una lista completa de opciones.

cURL Silente 

Si desea suprimir el medidor de progreso y los mensajes de error de la cURL, el interruptor -s proporciona esa función. Seguirá emitiendo los datos que solicites, así que, si quieres que el comando sea 100% silencioso, necesitarás dirigir la salida a un archivo.

Combina este comando con el indicador -O para guardar el archivo en tu directorio de trabajo actual. Esto asegurará que cURL regrese con salida 0.

$ curl -s -O http://example.com

Alternativamente, podría usar la opción –output para elegir dónde guardar el archivo y especificar un nombre.

$ curl -s http://example.com --output index.html

cURL Silente

Obtener encabezados

Agarrar el encabezado de una dirección remota es muy simple con cURL, sólo tienes que usar la opción -I.

$ curl -I example.com

Obtener encabezados

Si combinas esto con la opción -L, cURL devolverá las cabeceras de cada dirección a la que sea redirigido.

$ curl -I -L example.com

 

Múltiples encabezados

Puedes pasar los encabezados a cURL con la opción -H. Y para pasar varios encabezados, sólo tienes que usar la opción -H varias veces. Aquí hay un ejemplo:

$ curl -H 'Connection: keep-alive' -H 'Accept-Charset: utf-8 ' http://example.com

 

Post (cargar) un archivo

POST es una forma común de que los sitios web acepten datos. Por ejemplo, cuando se llena un formulario en línea, hay una buena posibilidad de que los datos se envíen desde el navegador utilizando el método POST. Para enviar datos a un sitio web de esta manera, utilice la opción -d.

$ curl -d 'name=geek&location=usa' http://example.com

Para subir un archivo, en lugar de texto, la sintaxis se vería así:

$ curl -d @filename http://example.com

Utilice tantas banderas -d como necesite para especificar todos los diferentes datos o nombres de archivo que esté tratando de subir.

Puedes usar la opción -T si quieres subir un archivo a un servidor FTP.

$ curl -T myfile.txt ftp://example.com/some/directory/

 

Enviar un correo electrónico

Enviar un correo electrónico es simplemente cargar datos desde tu computadora (u otro dispositivo) a un servidor de correo electrónico. Debido a que cURL es capaz de cargar datos, Podemos utilizarlo para enviar correos electrónicos. Existen una cantidad de opciones, pero aquí está un ejemplo de cómo enviar un correo electrónico a través de un servidor SMTP:

$ curl smtp://mail.example.com --mail-from [email protected] --mail-rcpt [email protected] --upload-file email.txt

Necesitas dar el formato correcto a tu archivo de correo electrónico, algo así:

$ cat email.txt

From: Web Administrator <[email protected]>

To: John Doe <[email protected]>

Subject: An example email

Date: Sat, 7 Dec 2019 02:10:15




John,

Hope you have a great weekend.

-Admin

Como es usual, opciones más detalladas y especializadas pueden ser encontradas en la página principal de cURL.

Leer mensajes de correo electrónico

cural soporta IMAP (y IMAPS) y POP3, puedes usar ambos para recuperar mensajes de correo electrónico de un servidor de correr.

Ingresa usando IMAP así:

$ curl -u username:password imap://mail.example.com

Este comando listará los buzones disponibles, pero no verá ningún mensaje específico. Para ello, especifica el UID del mensaje con la opción -X.

$ curl -u username:password imap://mail.example.com -X 'UID FETCH 1234'

 

Diferencias entre cURL y wget

A veces la gente confunde cURL y wget porque ambos son capaces de recuperar datos de un servidor. Pero esto es lo único que tienen en común.

Hemos mostrado en este artículo lo que cURL es capaz de hacer. wget proporciona un conjunto diferente de funciones. wget es la mejor herramienta para descargar sitios web y es capaz de recorrer directorios y enlaces de forma recursiva para descargar sitios enteros.

Para descargar sitios web, use wget. Si usa algún protocolo que no sea HTTP o HTTPS, o para subir archivos, use cURL. cURL también es una buena opción para descargar archivos individuales de la web, aunque wget también lo hace bien.

Espero que el tutorial te resulte útil. Sigue volviendo.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

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