Comando cURL con ejemplos

Published:

cURL es una herramienta de línea de comandos que encontramos en linux que nos permite transferir datos a través de una URL siendo muy útil para verificar conectividad hacia una determinada URL.

Curl soporta múltiples protocolos como DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet y TFTP.

Además, cURL soporta certificados SSL, HTTP POST, HTTP PUT, subidas FTP, cargas HTTP, proxies, HTTP/2, cookies, autenticación de usuario y contraseña (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate y Kerberos), transferencia de archivos, proxy tunneling y otros más.

Pasemos a los ejemplos prácticos.

1- Saber la versión

curl --version

2- Testear una URL

curl https://twiter.com

3- Guardar con cURL

Hay varias opciones que podemos usar:

3.1. -O para guardar un archivo en el directorio actual.

curl -O http://dominio.com/log.tar.gz

3.2. -o que nos permite especificar una ruta, un ejemplo sería:

curl -o archivo_descargado.tar.gz http://dominio.com/log.tar.gz

3.3. Reanudar si se corta la comunicación

curl -C - -O http://dominio.com/log.tar.gz

3.4. Descargar varios archivos a la vez

curl -O http://dominio.com/log1.tar.gz -O http://otra_web.com/log2.tar.gz

3.5. Descargar muchos archivos

Podemos hacer uso de una lista para decirle a curl que las descargue. Creamos un archivo, test.txt y colocamos todas las URL’s y lanzamos el comando.

xargs –n 1 curl -O < test.txt

3.6. Otra forma de guardar

Podemos hacer que se descargue el contenido de un sitio a un archivo

curl https://dominio.com > resultado.html

4- Ver un encabezado Query HTTP

Los encabezados HTTP permiten que el servidor web remoto realice el proceso de envió de información adicional sobre sí junto con la solicitud real, esto es usado para ofrecer al cliente detalles sobre cómo se está administrando la solicitud actual.

curl -I https://twitter.com

5- En modo silencioso

Curl no va muestrar los detalles del progreso ni errores en la salida

curl -s https://twitter.com

6- Modo verboso

Podemos tener info detallada sobre una operación Curl usando la opción -v

curl -v https://twitter.com

Acá es recomendable combinar el punto 3.6, para que se guarde el resultado, dado que puede llegar a ser muy largo.

7- Limitar la descarga de un archivo

Si el ancho de banda es poco, podemos limitar la velocidad, en este ejemplo a 10k

curl --limit-rate 10K http://dominio.com/log.tar.gz -O

8- Descarga a travez de un proxy

curl -x proxy.dominio.com:9090 -U user:password -O http://dominio.com/log.tar.gz

9- FTP

9.1. Para descargar archivos de un servidor FTP

curl -u username:password -O ftp://Nombre_o_ip_FTP/log.tar.gz

9.2. Subir un archivo a un FTP

curl -u username:password -T log.tar.gz ftp://Nombre_o_ip_FTP

Ejemplos con Request

1- Para indicarle a cURL que utilice un método POST en la petición, usaremos la opción -X, –request.

curl -X POST https://twitter.com

2- HTTP POST request con datos

Post se puede utilizar para enviar algún tipo de información al servidor de destino, para eso usaremos la opción -d, –data.
Esto permite que cURL envíe datos como lo haría tu navegador al rellenar un formulario y hacer clic en enviar. Asimismo, cURL también se encarga de añadir la cabecera Content-Type con el valor application/x-www-form-urlencoded a la petición.

curl -X POST -d "field=value&tool=curl" https://postman-echo.com/post

3- HTTP POST request para subir archivos

Podemos subir un archivo con la opción -F, –form. Teniendo en cuenta que usaremos un @ para decirle a cURL que estamos haciendo un upload.

curl -X POST -F "field=@/home/nksistemas/test.txt" https://servidor_destino.com/post

Pero podemos enviar varios campos

curl -X POST -F "field=@/home/nksistemas/test.txt" -F "tool=curl" -F "other-file=@/home/nksistemas/test2.txt" https://servidor_destino.com/post

4- Subir un fichero cambiando el nombre

curl -X POST -F 'field=@"/home/nksistemas/test.txt";filename="test2.txt' https://servidor_destino.com/post

5- HTTP POST request con datos JSON

Usaremos las opciones -d con -H combinadas.

curl -X POST -d '{"field":"value"}' -H "Content-Type: application/json" https://servidor_destino.com/post

Otros ejemplos prácticos:

1- Saber si un sitio web da como valor 200 u otro.

Para hacer esto, debemos entender cuales son los distintos tipos de código de estado HTTP.
Los cuales se dividen en 5 «tipos».

Las cinco clases incluyen:

  • 100: Códigos informativos que indican que la solicitud iniciada por el navegador continúa.
  • 200: Los códigos con éxito regresaron cuando la solicitud del navegador fue recibida, entendida y procesada por el servidor.
  • 300: Códigos de redireccionamiento devueltos cuando un nuevo recurso ha sido sustituido por el recurso solicitado.
  • 400: Códigos de error del cliente que indican que hubo un problema con la solicitud.
  • 500: Códigos de error del servidor que indican que la solicitud fue aceptada, pero que un error en el servidor impidió que se cumpliera.

Para hacer un script con curl que nos devuelva el valor de un sitio hacemos:

curl -o /dev/null --silent --head --write-out '%{http_code}\n' https://twitter.com

Donde

  • -o /dev/null lanza lejos de la habitual salida
  • --silent arroja el indicador de progreso
  • --head hace que un JEFE de la solicitud HTTP, en lugar de OBTENER
  • --write-out '%{http_code}\n' imprime el requiere código de estado

Te dejo un script para chequear una lista de varios sitios, que estarán en un archivo sitios.txt

#!/bin/bash 
while read LINE; 
  do curl -o /dev/null --silent --head --write-out '%{http_code}' "$LINE" 
  echo $LINE" 
done < sitios.txt

 

- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles