El software libre gratuito cURL es uno de los proyectos de código abierto más antiguos y populares. El programa, cuyo nombre viene de client URL, se utiliza para enviar datos en redes in­fo­r­má­ti­cas. La licencia abierta otorga el derecho de uso del programa para cualquier fin. En la ac­tua­li­dad, cURL se utiliza en una multitud de di­s­po­si­ti­vos.

¿Qué es cURL?

El software cURL consta de dos co­m­po­ne­n­tes. La bi­blio­te­ca del programa libcurl es la columna vertebral de la tra­n­s­fe­re­n­cia de datos y es co­m­pa­ti­ble con los si­guie­n­tes pro­to­co­los:

  • DICT
  • FILE
  • FTP
  • FTPS
  • GOPHER
  • HTTP
  • HTTPS
  • IMAP
  • IMAPS
  • LDAP
  • LDAPS
  • POP3
  • POP3S
  • RTMP
  • RTSP
  • SCP
  • SFTP
  • SMB
  • SMBS
  • SMTP
  • SMTPS
  • TELNET
  • TFTP

Por su parte, el programa de línea de comandos cURL actúa como una interfaz basada en texto e in­ter­ac­túa con libcurl a través de la línea de comandos.

El programa es una he­rra­mie­n­ta im­po­r­ta­n­te para el de­sa­rro­llo web, porque permite al de­sa­rro­lla­dor co­mu­ni­car­se di­re­c­ta­me­n­te con el servidor en lugar de tener que acceder a él desde un navegador. Los scripts basados en comandos cURL (en inglés: cURL commands) se utilizan para au­to­ma­ti­zar procesos, depurar y realizar pruebas.

¿Cómo funciona cURL?

Los dos co­m­po­ne­n­tes de cURL funcionan de maneras di­fe­re­n­tes.

¿Cómo se utiliza libcurl?

La bi­blio­te­ca del programa libcurl incluye funciones para enviar datos en redes in­fo­r­má­ti­cas. Existen enlaces de idioma o language bindings para decenas de lenguajes de pro­gra­ma­ción. Por lo tanto, las funciones de libcurl están a di­s­po­si­ción de un gran número de programas que se comunican con se­r­vi­do­res.

¿Cómo se utiliza cURL?

El programa cURL de línea de comandos se utiliza para el de­sa­rro­llo web. El método más sencillo es in­tro­du­cir los comandos cURL en la línea de comandos. Con los co­no­ci­mie­n­tos adecuados es posible probar y depurar se­r­vi­do­res y API.

En lugar de in­tro­du­cir los comandos ma­nua­l­me­n­te en la línea de comandos, se pueden integrar en scripts. De este modo, se pueden es­ta­n­da­ri­zar y au­to­ma­ti­zar ope­ra­cio­nes complejas como, por ejemplo, subir o descargar datos, así como programar la cu­m­pli­me­n­ta­ción de fo­r­mu­la­rios y copiar sitios web completos.

El esquema de un cURL command suele tener la siguiente es­tru­c­tu­ra:

# Esquema general de un cURL command
curl [opciones] <url>

En los ejemplos a co­n­ti­nua­ción uti­li­za­mos la forma siguiente:

url="www.example.com"
curl [opciones] "$url"

Hemos ex­te­r­na­li­za­do el URL real en una variable. De este modo, con las opciones las que de­te­r­mi­nan el fu­n­cio­na­mie­n­to de la ejecución de cURL.

Ejemplos prácticos del cURL command en Linux

Para poder utilizar los si­guie­n­tes ejemplos de cURL, ne­ce­si­ta­rás:

  1. Un ordenador con Linux o un sistema operativo similar a UNIX –también macOS.
  2. Acceso a la consola o a la línea de comandos.
  3. Un editor de código o editor de texto llano para componer los comandos.
Nota

Utiliza úni­ca­me­n­te un editor de código o de texto llano para componer los comandos. Bajo ninguna ci­r­cu­n­s­ta­n­cia se deben utilizar pro­ce­sa­do­res de texto como Word, Ope­nO­f­fi­ce o Li­breO­f­fi­ce para preparar el texto de la línea de comandos.

Primera prueba con cURL

En primer lugar, asegúrate de que cURL está instalado en el sistema. Para ello, abre la línea de comandos e introduce el siguiente comando (en ocasiones es necesario pulsar la tecla de retorno para que se ejecute el código).

# Comprobar que cURL está instalado
curl --version

Si se muestra un texto que comienza con curl y este va seguido de un número de versión, cURL estará instalado. Si cURL no está instalado, sigue las in­s­tru­c­cio­nes de “Eve­r­y­thi­ng curl” para instalar el programa.

Consejo

Utiliza los comandos curl --help y curl --manual para obtener más in­fo­r­ma­ción sobre el comando.

Además, debes abrir un nuevo documento en un editor de código. Puedes copiar los comandos allí para pre­pa­rar­los antes de in­tro­du­ci­r­los en la línea de comandos. Cuando el comando esté listo, cópialo en la línea de comandos y ejecútalo.

Nota

Los comandos que se utilizan en la línea de comandos tienen muchas re­pe­r­cu­sio­nes. Bá­si­ca­me­n­te, un comando mal escrito podría paralizar todo el sistema. Por eso es tan im­po­r­ta­n­te no copiar los comandos di­re­c­ta­me­n­te de Internet y eje­cu­tar­los sin más en la línea de comandos local. En lugar de esto, conviene tener una ventana vacía abierta en el editor de código. En ese recuadro, se pueden pegar los comandos: un paso in­te­r­me­dio que te obligará a comprobar de­te­ni­da­me­n­te cada comando y adaptarlo si fuera necesario antes de eje­cu­tar­lo.

Descargar archivos con cURL

Acceder a los datos del servidor con cURL

En principio, con cURL podrás acceder a cualquier URL que conozcas. En este contexto, el verbo curl (rizar en inglés) describe el proceso de dirigirse a un URL con cURL. Prueba el ejemplo siguiente:

# Dirígete al siguiente sitio con cURL
site="www.google.com"
curl "$site"

Cuando ejecutas el código de esta manera, el resultado es un texto in­co­m­pre­n­si­ble. Esto se debe a que la página principal de Google se devuelve en formato HTML como respuesta al acceso cURL. La fuente HTML se muestra en la línea de comandos sin formatear. Para su correcta re­pre­se­n­ta­ción es necesario un navegador. Por lo general, es más útil guardar el archivo lo­ca­l­me­n­te.

Consejo

Introduce el comando clear en la línea de comandos para vaciar la pantalla. De este modo, se borrarán los datos in­ne­ce­sa­rios de la línea de comandos.

Acceder a un archivo con cURL y guardarlo en el disco duro local

De­s­ca­r­ga­mos un logotipo de Wikipedia en inglés. La opción -O (o mayúscula y no cero), dirige a cURL para que utilice el nombre del archivo que se encuentra al final del URL. Con esta opción, cURL guardará el archivo de­s­ca­r­ga­do en el disco duro local con el mismo nombre.

# Una imagen de Wikipedia en inglés
archivo="https://en.wikipedia.org/static/images/project-logos/enwiki-2x.png"
# Abrir la imagen y guardarla localmente con el mismo nombre
curl "$archivo" -O

Sin embargo, ¿cómo se comporta con un URL que no incluye nombre de archivo? Prueba el código siguiente:

# Página de inicio de Google
homepage="www.google.com"
# Abrir la página de inicio con opción -O
curl "$homepage" -O

Como has podido comprobar, aparece un error porque el URL de la página de inicio de Google no contiene ningún nombre de archivo. En este caso, debes utilizar la opción -o (o minúscula) para asignarle un nombre de archivo.

# Página de inicio de Google
homepage="www.google.com"
# Nombre del archivo que se escribirá
nombre="homepage-google.html"
# Abrir página de inicio y guardarla localmente con el nombre seleccionado
curl "$homepage" -o "$name"

Reanudar la descarga con cURL si se ha in­te­rru­m­pi­do

Es posible que lo hayas sufrido alguna vez: llevas horas esperando a que se descargue un archivo de gran volumen cuando, de repente, se in­te­rru­m­pe la descarga y tienes que empezar de nuevo desde el principio. En este caso, la opción -C- te puede servir de ayuda:

# Un archivo de gran tamaño (genoma humano) para descargar
archivo="https://ftp.ncbi.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/reference/GCF_000001405.39_GRCh38.p13/GCF_000001405.39_GRCh38.p13_genomic.gbff.gz"
# Continuar descarga si se interrumpe
curl -C- -O "$archivo"
Nota

Si bien es cierto que la opción -C - incluye un espacio después de la C, se lee mejor y es más sencillo recordar la equi­va­le­n­cia -C- que hemos utilizado en el ejemplo.

Con cURL también puedes in­te­rru­m­pir una descarga ma­nua­l­me­n­te si es necesario. Con archivos de gran tamaño puede suponer una ventaja; por ejemplo, cuando tienes que salir de casa y llevarte contigo el ordenador portátil.

Consejo

Puedes cancelar la ejecución en curso de cURL. Para cancelar, pulsa Ctrl + C varias veces si fuera necesario.

Co­mu­ni­car­se con el servidor mediante cURL

La función de descarga de cURL es similar a la popular he­rra­mie­n­ta de línea de comandos wget. No obstante, cURL no es un software es­pe­cia­li­za­do en descargas, sino que está diseñado para la co­mu­ni­ca­ción general a través de redes, por lo que ofrece aún más ventajas.

Comprobar si un servidor es accesible con cURL

Con cURL podrás comprobar si un servidor es accesible. En este sentido, el fu­n­cio­na­mie­n­to de curl es similar al del comando ping. Sin embargo, debido a los pro­to­co­los y las opciones di­s­po­ni­bles, cURL se puede utilizar con más fle­xi­bi­li­dad. Además, ping trabaja en la capa de Internet, mientras que cURL funciona sobre la capa de apli­ca­ción. Eso significa que ping verifica si la máquina está en red. En cambio, el cURL command siguiente comprueba si un servidor reacciona y cómo lo hace:

# Verificar si un servidor web está disponible
server="google.com"
curl -I "$server"

Si después de ejecutar el código se muestra in­fo­r­ma­ción de estado, el servidor estará di­s­po­ni­ble.

Di­s­tri­buir en­ca­be­za­do con cURL

Con cada solicitud HTTP, además de tra­n­s­fe­ri­r­se el documento en sí, también se in­te­r­ca­m­bian di­fe­re­n­tes metadatos. Dichos datos, me­n­cio­na­dos en el en­ca­be­za­do HTTP, describen tanto el documento como el estado de la solicitud HTTP. Se­gu­ra­me­n­te te hayas topado alguna vez con el Error 404 No en­co­n­tra­do. Se trata, pre­ci­sa­me­n­te, de metadatos: el documento so­li­ci­ta­do no se ha en­co­n­tra­do.

Echa un vistazo a la di­s­tri­bu­ción del en­ca­be­za­do del URL “google.com”. Para ello, utiliza curl con la opción --head:

# Distribuir encabezado
url="google.com"
curl --head "$url"

Deberá vi­sua­li­zar­se, entre otros mensajes: “301 Moved Pe­r­ma­ne­ntly”. Se trata del código de estado HTTP para la re­di­re­c­ción pe­r­ma­ne­n­te. Lo que se observa es la re­di­re­c­ción de [google.com] (sin “www”) a [www.google.com].

Consejo

En lugar de la opción --head, también puedes utilizar la escritura equi­va­le­n­te -I (i mayúscula). Para re­co­r­dar­la, piensa que accedes a la info­r­ma­ción de un URL y no a su contenido.

Analizar cadenas de re­di­re­c­ción con cURL

La re­di­re­c­ción HTTP (en inglés: redirects) se puede activar en serie. En este contexto, se utiliza el término redirect chain (o cadena de re­di­re­c­ción). Imagina un sitio web cuya página de inicio sea [https://www.example.com/]. Pues bien, si nos dirigimos a este sitio desde [http://example.com], se pro­du­ci­rán las si­guie­n­tes re­di­re­c­cio­nes:

  • [http://example.com] → [https://example.com]
  • [https://example.com] → [https://www.example.com]
  • [https://www.example.com] → [https://www.example.com/]

Una co­n­ca­te­na­ción de re­di­re­c­cio­na­mie­n­tos conduce a tiempos de carga más largos e in­ne­ce­sa­rios y debe evitarse. La­me­n­ta­ble­me­n­te, se trata de un problema difícil de analizar. Cuando se carga la página en el navegador, se van su­ce­die­n­do los re­di­re­c­cio­na­mie­n­tos sin que el usuario apenas lo perciba. En este caso, te puede servir de ayuda la opción --location, que indica a cURL que siga hasta el último re­di­re­c­cio­na­mie­n­to. Aquí uti­li­za­mos la opción --head porque no nos interesa el contenido de las páginas.

# Comprobar redireccionamientos
url="google.com"
curl --location --head "$url"
Consejo

En lugar de la opción –location, también puedes utilizar la escritura equi­va­le­n­te -L (l mayúscula).

Trasladar datos al servidor con cURL

Además de acceder a datos, con cURL también podrás enviar datos a un servidor. Esto es muy práctico, por ejemplo, si queremos au­to­ma­ti­zar la cu­m­pli­me­n­ta­ción au­to­má­ti­ca de un fo­r­mu­la­rio en línea. Además del método de solicitud POST, cURL también es co­m­pa­ti­ble con GET.

Puesto que enviar datos es una tarea más compleja que acceder a ellos, solo podemos esbozar un ejemplo apro­xi­ma­ti­vo. Para obtener in­fo­r­ma­ción más detallada, consulta los consejos de “Eve­r­y­thi­ng curl”.

# Transferir datos al servidor
url="example.com"
# Introduce los datos como pares de valores clave separados por “&”
datos="nombre=Pedro&apellido=González&edad=42"
# Esta ejecución cURL transfiere los datos mediante POST
curl --data "$datos" "$url"
# Alternativamente, indica a cURL que transfiera los datos mediante GET
curl --data "$datos" "$url" --get

Leer cookies con cURL

Las cookies HTTP son pequeños archivos de texto que se almacenan lo­ca­l­me­n­te en el di­s­po­si­ti­vo del usuario cuando visita la mayoría de los sitios web. Dentro de tu navegador puedes ver y borrar las cookies de cualquier página que hayas visitado. Sin embargo, si lo que quieres es hacer pruebas, esto puede resultar demasiado engorroso. Con curl y la opción --cookie-jar (caja de galletas en ca­s­te­llano), también puedes acceder di­re­c­ta­me­n­te a las cookies.

# Leer cookies
url="www.google.com"
cookies="cookies.txt"
curl --head --cookie-jar "$cookies" "$url"
# Mostrar cookies con el comando cat
cat "$cookies"
Consejo

Con la opción --cookie también puedes indicar a cURL que envíe cookies.

Opciones generales

Algunas de las opciones cURL di­s­po­ni­bles se pueden combinar con las que ya hemos me­n­cio­na­do.

Mostrar in­fo­r­ma­ción adicional

En algunos casos, la in­fo­r­ma­ción re­pre­se­n­ta­da en la ejecución de un cURL command no es su­fi­cie­n­te. A co­n­ti­nua­ción, puedes utilizar la opción --verbose. Un cURL command que incluya esa opción dará una mayor cantidad de in­fo­r­ma­ción.

# Mostrar información adicional
url="www.google.com"
curl --verbose -I "$url"

In­tro­du­cir usuario y co­n­tra­se­ña con cURL

Algunos URL están cifrados con au­te­n­ti­ca­ción HTTP para evitar accesos no au­to­ri­za­dos. ¿Qué ocurre si intentas acceder con cURL a este tipo de URL? Si no in­tro­du­ces el nombre de usuario y la co­n­tra­se­ña, aparecerá el error HTTP 401 en pantalla. En ese caso, deberás utilizar el siguiente esquema:

# Introducir usuario y contraseña con cURL
# URL protegido por contraseña 
url="www.example.com/secure/"
# Usuario
usuario=""
# Contraseña
contraseña=""
curl --user "${nutzer}:${passwort}" "$url"
Consejo

También puedes utilizar curl para acceder a los datos de un servidor FTP. Utiliza para ello la opción --user para es­pe­ci­fi­car un nombre de usuario y una co­n­tra­se­ña.

Utilizar un proxy con cURL

Un proxy es un servidor in­te­r­me­dio. Utilizar un proxy puede ser útil por diversas razones. Por ejemplo, el proxy permite cumplir con mayor facilidad ciertos re­qui­si­tos de seguridad y de re­n­di­mie­n­to.

Cuando te conectas a Internet a través de un proxy, debes informar a cURL. Para ello, debes utilizar la opción --proxy:

# Utilizar un proxy con cURL
url="www.google.com"
proxy="proxy.example.com"
port="8080"
curl --proxy "${proxy}:${port}" "$url"
Nota

Si necesitas indicar el nombre de usuario y la co­n­tra­se­ña en el servidor proxy, utiliza la opción --proxy-user. En ese caso, introduce el nombre de usuario y la co­n­tra­se­ña siguiendo el formato “usuario: co­n­tra­se­ña”.

Ir al menú principal