¿Qué es curl?
curl es la abreviatura de 'Client URL', una utilidad CLI que utiliza la sintaxis URL para enviar/recibir datos. Se usa en una amplia gama de áreas como desarrollo web, pruebas de API, automatización CI/CD y resolución de problemas operativos.
Características clave
- Varios protocolos: HTTP/HTTPS, FTP/FTPS, SFTP, LDAP, SMTP/SMTPS, etc. (depende de las opciones de compilación).
- Control HTTP: Control granular de métodos, encabezados, cookies, compresión, HTTP/2, redirecciones, tiempos de espera, reintentos, etc.
- Carga/Descarga: Descarga de archivos (-o/-O), reanudación de descargas (-C -), carga de formularios (-F), carga de un solo archivo (-T).
- Seguridad: Verificación de certificados TLS (habilitada por defecto), especificación de raíz de confianza (--cacert), certificado de cliente (--cert/--key).
- Amigable con la automatización: Salida silenciosa (-s), salir en caso de fallo (-f), salida formateada (-w), adecuado para scripts.
Opciones principales (Shell)
Básicamente, se requiere la URL de destino de la solicitud. Se pueden enumerar varias URLs separadas por espacios o leerlas desde un archivo (@file).
1. Solicitudes básicas y descarga
2. Métodos HTTP y transferencia de datos
3. Encabezados, autenticación, cookies
4. Control de salida/Fiabilidad
5. Seguridad/TLS y Proxy/Diagnóstico
6. Protocolo/Versión
7. Ayuda/Versión
Comando generado:
Combina los comandos.
Descripción:
`curl` Ejecutando el comando.
Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.
Ejemplos de escenarios de uso (Shell)
Patrones de solicitud de uso frecuente en la práctica.
Mostrar contenido de página web
curl https://example.com
Solicitud GET básica.
Descargar archivo (seguir redirecciones)
curl -O -L https://wordpress.org/latest.zip
-O nombre de archivo original, -L seguir redirecciones.
GET JSON + formato bonito
curl -s https://api.github.com/users/google | jq
Análisis/mejora de legibilidad con jq.
POST JSON
curl -X POST -H "Content-Type: application/json" -d '{"username":"test"}' https://api.example.com/users
Especificar encabezados y cuerpo.
Carga de archivo de formulario (multipart)
curl -F "upload_file=@./my-image.png" https://example.com/upload
Nombre de campo=upload_file, especificar ruta de archivo con @.
Autenticación con token Bearer
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/me
Uso del encabezado Authorization.
Ver solo encabezados de respuesta
curl -I https://google.com
Útil para diagnosticar el estado del servicio/caché.
Salir con código no cero en caso de fallo + silencioso
curl -sSf https://example.com/health
Combinación -sS -f: amigable con scripts.
Tiempo de espera + reintento
curl --connect-timeout 5 --max-time 20 --retry 3 --retry-all-errors https://example.com/api
Respuesta a redes inestables.
Probar con IP específica (--resolve)
curl --resolve 'api.example.com:443:203.0.113.10' https://api.example.com/status
Prueba de bypass de DNS (manteniendo SNI).
Instalación
La mayoría de las veces viene preinstalado; si no, se instala mediante paquete.
Debian/Ubuntu
sudo apt update && sudo apt install -y curl
RHEL/CentOS/Fedora
sudo dnf install -y curl
Arch Linux
sudo pacman -S --needed curl
Consejos y precauciones
Consejos útiles
- curl vs wget: wget es fuerte en descargas grandes/recursivas, curl en interacción con API/control granular.
- Comillas: Se recomienda encerrar JSON/caracteres especiales en -d/-H con comillas simples.
- Respuesta comprimida: Usar --compressed descomprime automáticamente si el servidor lo soporta, reduciendo el volumen de datos transferidos.
- Proxy: El proxy HTTP se configura con -x, SOCKS5 con --socks5.
- Precaución de seguridad (-k): -k/--insecure solo debe usarse para desarrollo/pruebas. En producción, se recomienda configurar una raíz de confianza (--cacert).