cURL: cliente HTTP desde la terminal
cURL (Client URL) es una herramienta de línea de comandos para transferir datos usando URLs. Soporta HTTP, HTTPS, FTP y docenas de otros protocolos. Es la navaja suiza para hacer peticiones HTTP, probar endpoints, descargar archivos o depurar APIs sin necesidad de un navegador ni de una aplicación gráfica.
sudo apt install curl # Debian/Ubuntu
curl --version # verificar instalación
GET básico
La forma más simple: curl + URL imprime la respuesta en pantalla:
curl https://ejemplo.com
Si la URL devuelve JSON, la respuesta se mostrará en crudo. Para formatearla, puedes pasarla a jq:
curl https://api.ejemplo.com/datos | jq
Guardar el output
-o nombre.html→ guarda con el nombre que tú indiques-O→ guarda con el nombre que usa el servidor en la URL
curl -o portada.html https://ejemplo.com
curl -O https://ejemplo.com/fichero.zip
Seguir redirecciones
Por defecto curl no sigue redirecciones (301, 302). Con -L las sigue automáticamente:
curl -L https://ejemplo.com
Inspeccionar cabeceras
curl -I https://ejemplo.com # solo cabeceras de respuesta (método HEAD)
curl -i https://ejemplo.com # cabeceras + cuerpo de respuesta
curl -v https://ejemplo.com # verbose: petición y respuesta completas
-v es muy útil para depurar: muestra exactamente qué envía y recibe curl, incluyendo el handshake TLS.
POST con datos de formulario
Para simular el envío de un formulario HTML:
curl -X POST -d "nombre=juan&email=juan@ejemplo.com" https://ejemplo.com/formulario
Con --data-urlencode si los valores tienen caracteres especiales:
curl -X POST --data-urlencode "mensaje=Hola, ¿qué tal?" https://ejemplo.com/formulario
POST con JSON
Necesitas indicar el Content-Type con -H y el cuerpo con -d:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"nombre": "juan", "email": "juan@ejemplo.com"}' \
https://api.ejemplo.com/usuarios
Cabeceras personalizadas
Con -H puedes añadir cualquier cabecera HTTP:
curl -H "Accept: application/json" \
-H "X-Mi-Cabecera: valor" \
https://api.ejemplo.com/datos
Autenticación
Autenticación básica (usuario:contraseña):
curl -u usuario:contraseña https://ejemplo.com/privado
Token Bearer, el esquema más habitual en APIs modernas:
curl -H "Authorization: Bearer mi_token_aqui" https://api.ejemplo.com/datos
Otras opciones útiles
-s→ silencioso: suprime la barra de progreso y los mensajes de estado-S→ combinado con-s, sí muestra errores:curl -sS ...--max-time 10→ tiempo máximo de espera en segundos-A "MiAgente/1.0"→ cambiar el User-Agent-k/--insecure→ ignorar errores de certificado SSL (solo para pruebas)
En la próxima lección: cURL con APIs: testing de endpoints REST, cookies, subida de archivos, scripts y automatización.