Comando curl
El comando curl (Client URL) es una herramienta de línea de comandos esencial para transferir datos utilizando diversos protocolos de red. Es ampliamente utilizado por administradores de sistemas, desarrolladores web y técnicos de redes para interactuar con servidores web, probar APIs, descargar archivos o diagnosticar problemas de conectividad HTTP/HTTPS directamente desde la terminal.
| Categoría | Redes y Transferencia de Datos |
|---|---|
| Disponible en | Linux / Unix / macOS / Windows (integrado nativamente en versiones recientes) |
| Equivalente en Windows | Invoke-WebRequest (PowerShell, comúnmente con el alias curl o iwr) |
| Sustituye a | Herramientas gráficas de prueba de APIs (como navegadores web o clientes pesados) para tareas rápidas de diagnóstico. |
| ¿Requiere permisos de administrador? | No, salvo que se intente guardar el archivo descargado en un directorio protegido del sistema que requiera privilegios elevados. |
¿Qué significa su nombre?
CURL proviene de la contracción de Client URL (Cliente URL). El nombre original del proyecto era httpget, pero al ir incorporando soporte para más protocolos (como FTP, GOPHER, etc.), cambió su denominación a urlget, y finalmente se adoptó curl acompañado del lema "command line URL transfer tool".
Creado por Daniel Stenberg en 1997, se ha convertido en una de las librerías y herramientas de red más omnipresentes del mundo, estando presente en miles de millones de dispositivos, desde servidores empresariales hasta consolas de videojuegos y coches conectados.
¿Para qué sirve?
El comando curl sirve principalmente para:
- Realizar peticiones HTTP y HTTPS (GET, POST, PUT, DELETE) para probar y depurar APIs o servicios web.
- Descargar archivos desde la red o subir ficheros a servidores remotos mediante múltiples protocolos.
- Inspeccionar las cabeceras HTTP de respuesta de un servidor web para verificar redirecciones, estados o tipos de contenido.
- Comprobar si un servicio web responde correctamente o si hay problemas de conectividad o certificados SSL.
Sintaxis
curl [opciones] [URL]
Las opciones más habituales son:
| Opción | Descripción |
|---|---|
-O |
Descarga el archivo manteniendo el mismo nombre con el que está guardado en el servidor remoto. |
-o [nombre] |
Guarda el contenido descargado con el nombre de archivo especificado. |
-I o --head |
Muestra únicamente las cabeceras HTTP de la respuesta del servidor (útil para auditorías rápidas). |
-L |
Sigue las redirecciones HTTP (si el servidor responde con un código 301 o 302, curl salta automáticamente a la nueva ubicación). |
-X [MÉTODO] |
Especifica el método HTTP a utilizar en la petición (por ejemplo, -X POST o -X PUT). |
Comandos más utilizados
| Comando | Descripción |
|---|---|
curl https://example.com |
Muestra el código HTML de una página web directamente en la salida estándar. |
curl -O https://example.com/archivo.zip |
Descarga un archivo remoto conservando su nombre original. |
curl -I https://google.com |
Consulta las cabeceras HTTP devueltas por el servidor de Google. |
curl -s -L https://ifconfig.me |
Consulta silenciosamente (-s) la dirección IP pública actual de la conexión. |
Equivalencia con otros sistemas
| Acción | Linux / Unix | Windows (PowerShell) | Windows (CMD clásico) |
|---|---|---|---|
| Descargar contenido web / archivo | curl |
Invoke-WebRequest / iwr |
No nativo (requiere herramientas externas o wget) |
| Consultar cabeceras HTTP | curl -I |
Invoke-WebRequest -Method Head |
No nativo |
| Enviar datos a una API | curl -X POST ... |
Invoke-RestMethod |
No nativo |
Ejemplos
Obtener el contenido HTML de una página web
curl https://es.wikipedia.org
Descargar un archivo y guardarlo con un nombre específico
curl -o imagen.png https://example.com/logo.png
Consultar las cabeceras HTTP de un sitio web siguiendo redirecciones
curl -I -L https://github.com
Enviar datos en formato JSON mediante una petición POST a una API
curl -X POST -H "Content-Type: application/json" -d '{"usuario": "admin", "estado": "activo"}' https://api.example.com/status
Ejemplo de salida
HTTP/2 200
content-type: text/html; charset=UTF-8
cache-control: max-age=3600
content-length: 1256
¿Cómo interpretar la salida?
- HTTP/2 200: Indica que se ha utilizado la versión 2 del protocolo HTTP y que la petición se ha completado con éxito (código de estado 200 OK).
- content-type: text/html: Especifica el formato en el que el servidor devuelve la información (en este caso, código HTML codificado en UTF-8).
- content-length: 1256: Muestra el tamaño total del contenido devuelto medido en bytes.
Errores habituales
- Olvidar incluir el esquema del protocolo en la URL (como
http://ohttps://), lo que provoca quecurldevuelva un error de resolución de host o no sepa cómo enfocar la conexión. - Confundir el comportamiento de
curlcon un navegador web visual:curlprocesa el código fuente o los datos crudos, pero no renderiza estilos CSS ni ejecuta código JavaScript interactivo.
Conceptos relacionados
- Protocolo HTTP y HTTPS
- Cabeceras HTTP (Headers)
- Códigos de estado HTTP (200, 404, 500, etc.)
- APIs RESTful
- Redirecciones web
Comandos relacionados
wgetnc(Netcat)pingtraceroutedig
Curiosidades
El comando curl es tan robusto y versátil que la librería que hay por debajo (libcurl) es utilizada en millones de dispositivos cotidianos que ni imaginas: smart TVs, impresoras de red, sistemas de información de vehículos, videoconsolas e incluso los rovers de la NASA en Marte utilizan código basado en cURL para sus comunicaciones de datos.
Prácticas propuestas
- Utiliza el comando
curlpara descargar el código fuente de una página web estática y guárdalo en un archivo local usando la opción-o. - Comprueba las cabeceras de respuesta HTTP de tu propia página web o blog de prácticas utilizando el parámetro
-I. - Realiza una petición silenciosa utilizando la opción
-scombinada con un servicio público (comohttps://ipinfo.io/ip) para averiguar tu dirección IP pública desde la terminal. - Prueba a acceder a una URL que redireccione (por ejemplo, introduciendo
http://google.comsin la "s") y observa cómo se comporta al añadir o quitar la opción-L. - Simula una descarga de archivo grande utilizando la opción
-Opara verificar que el sistema recupera el fichero correctamente en el directorio actual. - Si estás utilizando un entorno de prácticas en Windows, abre PowerShell y compara el funcionamiento del comando nativo
Invoke-WebRequestcon el comportamiento habitual decurl.
Consejo: Añade siempre la opción -s (silent) cuando estés automatizando scripts de Bash y quieras evitar que curl imprima la barra de progreso de descarga en medio de tus registros (logs).