Saltar al contenido principal

Clase 00 — Introducción a curl

curl (Client URL) es una herramienta de línea de comandos para transferir datos con URLs. Soporta más de 25 protocolos, incluyendo HTTP, HTTPS, FTP, SCP, SFTP, y más. Es la navaja suiza de las peticiones HTTP y una herramienta esencial para cualquier DevOps.

¿Por qué aprender curl?

UsoEjemplo
Probar APIsVerificar endpoints antes de escribir código
DebugDiagnosticar problemas de red y HTTP
AutomatizaciónScripts de despliegue, health checks
CI/CDNotificaciones, webhooks, despliegues
MonitoreoVerificar estado de servicios
DescargasObtener archivos, herramientas, paquetes
SeguridadProbar certificados SSL, headers

Instalar curl

# macOS (viene preinstalado)
curl --version

# Ubuntu/Debian
sudo apt update && sudo apt install curl -y

# CentOS/RHEL
sudo yum install curl -y

# Alpine
apk add curl

Tu primera petición

# La petición más simple
curl https://httpbin.org/get

# Silencioso + formato con jq
curl -s https://httpbin.org/get | jq '.'

Anatomía de una petición curl

curl -s -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer mi-token" \
-o salida.json \
-w "%{http_code}" \
"https://api.ejemplo.com/datos?page=1&limit=10"
ParteSignificado
curlEl comando
-sSilencioso (sin barra de progreso)
-X GETMétodo HTTP (GET es el default)
-H "..."Header de la petición
-o salida.jsonGuardar respuesta en archivo
-w "%{http_code}"Mostrar info extra (código HTTP)

Opciones más usadas

curl -s https://httpbin.org/get          # Silencioso
curl -L https://httpbin.org/redirect/3 # Seguir redirecciones
curl -I https://httpbin.org/get # Solo headers
curl -i https://httpbin.org/get # Headers + body
curl -v https://httpbin.org/get # Verbose (debug)
curl -o archivo.json https://httpbin.org/get # Guardar en archivo
curl -O https://ejemplo.com/archivo.tar.gz # Guardar con nombre original

# Solo el código HTTP
curl -s -o /dev/null -w "%{http_code}" https://httpbin.org/get

# Timeouts
curl --connect-timeout 5 --max-time 10 https://httpbin.org/get

Probar que funciona

# Tu IP pública
curl -s https://httpbin.org/ip | jq '.'

# User-Agent
curl -s https://httpbin.org/user-agent | jq '.'

# Clima en tu ciudad
curl wttr.in/BuenosAires?format=3

# Chiste random
curl -s https://official-joke-api.appspot.com/random_joke | jq '.'

curl vs wget

Característicacurlwget
Protocolos25+ (HTTP, FTP, SCP, SMTP...)HTTP, HTTPS, FTP
Salida por defectostdoutArchivo
APIs REST⭐ Excelente❌ No diseñado para eso
Descargas recursivas❌ No✅ Sí
Scripting⭐ Muy flexibleBásico

Regla general: Usá curl para APIs y automatización. Usá wget para descargar sitios web completos.

Exit codes de curl

# 0  → Éxito
# 6 → No se puede resolver el host
# 7 → No se puede conectar al host
# 22 → HTTP error (con --fail)
# 28 → Timeout
# 35 → Error SSL

# --fail: Devuelve error si HTTP >= 400
if curl -sf --max-time 5 https://mi-api.com/health > /dev/null; then
echo "Servicio OK"
else
echo "Servicio caído"
fi

Ejemplo: Verificar conectividad

#!/bin/bash
urls=(
"https://google.com"
"https://github.com"
"https://api.ejemplo.com"
)

for url in "${urls[@]}"; do
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 5 "$url")
if [[ "$code" -ge 200 && "$code" -lt 400 ]]; then
printf "✅ %-35s → HTTP %s\n" "$url" "$code"
else
printf "❌ %-35s → HTTP %s\n" "$url" "$code"
fi
done

Ejercicios

  1. Ejecutá curl --version y anotá qué protocolos soporta tu versión
  2. Hacé una petición a https://httpbin.org/get y formateá la salida con jq
  3. Obtené tu IP pública usando al menos 3 servicios diferentes
  4. Creá un script que verifique si 5 URLs están accesibles y muestre el código HTTP