¿Qué es el comando curl? Ejemplos, Flags, Requests HTTP
curl es una herramienta línea comandos para enviar requests HTTP/HTTPS/FTP desde terminal. Usado para testing API, debugging, scripting y checks CI.
¿Qué es el comando curl?
curl (Client URL) es una herramienta línea de comandos y library para transferir datos con URLs. Soporta docenas de protocolos (HTTP, HTTPS, FTP, SFTP, SMTP, IMAP, LDAP, SCP) y es el estándar de facto para hacer requests HTTP desde el terminal. Originalmente escrito en 1996 por Daniel Stenberg, curl viene bundled con la mayoría de distribuciones Linux, macOS y Windows 10+.
Los desarrolladores usan curl para testear endpoints API, debugear issues HTTP, scripting de automatización, descargar archivos y checks CI/CD.
Sintaxis básica curl
curl https://api.example.com/users/42Con headers + body:
curl -i https://api.example.com/users/42POST con body JSON:
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@example.com"}'Flags curl más usados
| Flag | Qué hace |
|---|---|
-X METHOD | Setear método HTTP |
-H "Header: value" | Agregar header request |
-d 'data' | Enviar body request |
-d @file.json | Leer body desde archivo |
-F "field=value" | Enviar campo multipart/form-data |
-F "file=@photo.jpg" | Subir archivo (multipart) |
-i | Incluir headers response |
-I | Enviar request HEAD |
-L | Seguir redirects |
-o file | Guardar body response a archivo |
-s | Modo silent |
-v | Output verbose (debug) |
-k | Saltar verificación cert TLS |
-u user:pass | HTTP Basic Auth |
--max-time N | Timeout total en segundos |
Recetas comunes curl
Testear un endpoint API
curl -i https://api.example.com/healthPOST JSON
curl -X POST https://api.example.com/orders \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"product_id": 42, "quantity": 1}'Descargar un archivo
curl -O https://example.com/large-file.zipSubir archivo (multipart)
curl -F "avatar=@photo.jpg" -F "username=alice" https://api.example.com/uploadObtener solo código status HTTP
curl -s -o /dev/null -w "%{http_code}" https://example.comcurl vs wget vs httpie
| Aspecto | curl | wget | HTTPie |
|---|---|---|---|
| Mejor para | Scripting, testing API | Descargas archivo, mirroring | Testing API human-friendly |
| Output | Stdout | Archivo | Stdout, color-coded |
| Descarga recursiva | No | Sí (especialidad) | No |
| Protocolos | 30+ | HTTP, HTTPS, FTP | Solo HTTP/HTTPS |
| Pre-instalado | Casi en todos lados | Solo Linux típicamente | Requiere install |
Pitfalls comunes curl
- Olvidar Content-Type para JSON.
- Escape de quotes en shell.
- Logueando secrets.
- Issues HTTP/2.
- Status code incorrecto en scripts.
--failpara exit non-zero en 4xx/5xx.
curl en CI/CD
- Smoke tests después de deploy.
- Endpoints health check.
- Tests integración API.
- Tests presupuesto performance.
FAQ: comando curl
¿Cuál es la diferencia entre -d y --data-raw?
-d procesa @ como "leer desde archivo". --data-raw envía characters @ literales.
¿Cómo envío un método HTTP custom?
-X CUSTOM funciona.
¿Cómo veo el request que curl envía?
-v para modo verbose.
¿Puede curl hacer requests paralelos?
curl 7.66+ soporta --parallel. Para load testing at scale herramientas dedicadas.
¿Cómo manejo cookies entre múltiples calls curl?
Guardar con --cookie-jar, enviar con --cookie.
¿Puedo usar curl como herramienta load testing?
Para 1-10 requests concurrentes sí. Para load testing real herramientas dedicadas.
Más allá de curl: load testing at scale con LoadFocus
Si has alcanzado los límites de curl-en-loop para load testing, LoadFocus corre scripts JMeter y k6 que llevan requests HTTP hasta 12.500 VUs desde 25+ regiones. Regístrate en loadfocus.com/signup.
Herramientas LoadFocus relacionadas
Lleva este concepto a la práctica con LoadFocus — la misma plataforma que potencia todo lo que acabas de leer.