Comando curl

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:// o https://), lo que provoca que curl devuelva un error de resolución de host o no sepa cómo enfocar la conexión.
  • Confundir el comportamiento de curl con un navegador web visual: curl procesa 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

  • wget
  • nc (Netcat)
  • ping
  • traceroute
  • dig

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

  1. Utiliza el comando curl para descargar el código fuente de una página web estática y guárdalo en un archivo local usando la opción -o.
  2. Comprueba las cabeceras de respuesta HTTP de tu propia página web o blog de prácticas utilizando el parámetro -I.
  3. Realiza una petición silenciosa utilizando la opción -s combinada con un servicio público (como https://ipinfo.io/ip) para averiguar tu dirección IP pública desde la terminal.
  4. Prueba a acceder a una URL que redireccione (por ejemplo, introduciendo http://google.com sin la "s") y observa cómo se comporta al añadir o quitar la opción -L.
  5. Simula una descarga de archivo grande utilizando la opción -O para verificar que el sistema recupera el fichero correctamente en el directorio actual.
  6. Si estás utilizando un entorno de prácticas en Windows, abre PowerShell y compara el funcionamiento del comando nativo Invoke-WebRequest con el comportamiento habitual de curl.

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).