Cheatsheet cURL
Ferramenta para transferência de dados
cURL
Pedidos Básicos
GET simple
curl https://api.ejemplo.com
# Guardar respuesta en un archivo
curl https://site.com -o pagina.html
# Seguir redirecciones
curl -L http://site.com
Petición GET básica.
Timeout y retry
# Timeout de conexión (5s)
curl --connect-timeout 5 url
# Timeout total (30s)
curl --max-time 30 url
# Reintentar en fallo
curl --retry 3 --retry-delay 2 url
Control de tiempo.
Ver solo headers
# Solo cabeceras
curl -I https://site.com
# Headers + cuerpo
curl -i https://site.com
# Solo el código de estado
curl -o /dev/null -s -w "%{http_code}" url
Inspeccionar la respuesta.
Modo silencioso
# Sin barra de progreso
curl -s https://api.com
# Silencioso pero muestra errores
curl -sS https://api.com
# Mostrar errores detallados
curl -sS --show-error url
Controlar el output.
Parámetros de query
# Directamente en la URL
curl "https://api.com/búsqueda?q=node&p=2"
# Con --data-urlencode
curl -G https://api.com/búsqueda
--data-urlencode "q=hola mundo"
--data-urlencode "p=2"
Query strings (GET).
Métodos HTTP
POST
curl -X POST https://api.com/users
# Con datos de formulario
curl -X POST https://api.com/users
-d "nombre=Ana&email=ana@mail.com"
Enviar una petición POST.
PUT y PATCH
# PUT (reemplazar)
curl -X PUT https://api.com/users/1
-d "nombre=Ana Silva"
# PATCH (actualización parcial)
curl -X PATCH https://api.com/users/1
-d "email=nuevo@mail.com"
Actualizar recursos.
DELETE
curl -X DELETE https://api.com/users/1
# Con autenticación
curl -X DELETE https://api.com/users/1
-H "Authorization: Bearer TOKEN"
Eliminar recursos.
Definir cualquier método
# Método personalizado
curl -X OPTIONS https://api.com
# HEAD
curl -I https://api.com
# Cualquier verbo
curl -X CUSTOM https://api.com
Opción -X / --request.
Headers e Autenticação
Enviar headers
curl https://api.com
-H "Content-Type: application/json"
-H "Accept: application/json"
-H "X-API-Key: abc123"
# Quitar una cabecera
curl url -H "User-Agent:"
Opción -H / --header.
Basic Auth
# user:password
curl -u usuario:contrasena https://api.com
# Solo usuario (pide contraseña)
curl -u usuario https://api.com
Autenticación básica.
Bearer Token
curl https://api.com/privado
-H "Authorization: Bearer SEU_TOKEN"
Autenticación por token (JWT/OAuth).
User-Agent y Referer
# User-Agent personalizado
curl url -A "MeuApp/1.0"
# Referer
curl url -e "https://origem.com"
# Cookies vía header
curl url -H "Cookie: id=123"
Identificación del cliente.
Enviar Dados
JSON en el cuerpo
curl -X POST https://api.com/users
-H "Content-Type: application/json"
-d '{
"nombre": "Ana",
"email": "ana@mail.com"
}'
Enviar un payload JSON.
JSON desde un archivo
# Leer cuerpo desde un archivo
curl -X POST https://api.com/users
-H "Content-Type: application/json"
-d @datos.json
Usar un archivo como cuerpo.
Formulario (form-data)
# multipart/form-data
curl -X POST https://api.com/upload
-F "nombre=Ana"
-F "foto=@foto.jpg"
Datos de formulario.
URL-encoded
# application/x-www-form-urlencoded
curl -X POST https://api.com/login
--data-urlencode "user=ana"
--data-urlencode "pass=a b c"
# -d codifica automáticamente
Datos codificados.
Download e Upload
Descarga de archivo
# Nombre original (-O mayúscula)
curl -O https://site.com/foto.jpg
# Nombre personalizado
curl -o imagen.png https://site.com/f
# Varios archivos
curl -O url1 -O url2
Descargar archivos.
Reanudar descarga
# Continuar transferencia (-C -)
curl -C - -O https://site.com/grande.zip
Reanudar descargas interrumpidas.
Subida de archivo
# Subida vía form
curl -X POST https://api.com/upload
-F "fichero=@documento.pdf"
# Subida binaria (PUT)
curl -X PUT https://api.com/file
--data-binary @foto.jpg
Enviar archivos.
FTP
# Descarga vía FTP
curl -u user:pass ftp://server/f.txt
# Subida vía FTP
curl -u user:pass -T local.txt
ftp://server/remoto.txt
Transferencias FTP.
Debug e Inspeção
Verbose
# Detalles de la conexión
curl -v https://site.com
# Solo trace de envío/recepción
curl --trace - https://site.com
# Trace a un archivo
curl --trace log.txt url
Diagnóstico detallado.
Ver la petición enviada
# Mostrar request sin enviar
curl --trace-ascii - url
# Cabeceras de la petición
curl -v url 2>&1 | grep ">"
Inspeccionar el request.
Información de la respuesta
# Variables con -w
curl -s -o /dev/null -w \
"Status: %{http_code}\n
Tiempo: %{time_total}s\n
Tamaño: %{size_download}\n" url
Métricas de la petición.
Tiempo por fase
curl -s -o /dev/null -w \
"DNS: %{time_namelookup}\n
Conexión: %{time_connect}\n
TTFB: %{time_starttransfer}\n
Total: %{time_total}\n" url
Análisis de rendimiento.
Recursos Avançados
Cookies
# Guardar cookies
curl -c cookies.txt https://site.com
# Enviar cookies
curl -b cookies.txt https://site.com
# Cookie manual
curl -b "sesión=abc" url
Gestión de cookies.
Redirects
# Seguir redirects
curl -L http://site.com
# Máximo de redirects
curl -L --max-redirs 5 url
# Ver destino final
curl -L -o /dev/null -w "%{url_effective}" url
Seguir redirecciones.
SSL / TLS
# Ignorar certificado (prueba)
curl -k https://self-signed.com
# Certificado específico
curl --cacert cert.pem url
# Forzar versión TLS
curl --tlsv1.2 url
Seguridad SSL.
Proxy
# Usar un proxy
curl -x http://proxy:8080 url
# Proxy con autenticación
curl -x http://user:pass@proxy:8080 url
# Sin proxy para un host
curl --noproxy "localhost" url
Conexión vía proxy.
Formatação e Truques
Formatear JSON con jq
# Formateado y coloreado
curl -s https://api.com/users | jq
# Extraer un campo
curl -s url | jq '.data.nombre'
# Array de nombres
curl -s url | jq '.[].nombre'
Procesar respuestas JSON.
Buenas prácticas
• Usar -s en scripts (sin progreso)
• Siempre -L si hay redirects
• Verificar %{http_code} en automatización
• Usar -k solo en pruebas locales
• Proteger tokens (no en historial)
• Preferir --data-urlencode para datos
Convenciones de uso.
Guardar headers en un archivo
# Cabeceras separadas
curl -D headers.txt -o corpo.html url
# Solo cabeceras
curl -sI url > headers.txt
Separar cabeceras y cuerpo.
Múltiples peticiones
# Secuencia de URLs
curl "https://api.com/page[1-3]"
# Patrón de nombres
curl -O "https://site.com/img[01-10].png"
URLs en secuencia.
Config file (.curlrc)
# ~/.curlrc
-H "Accept: application/json"
--connect-timeout 10
-L
# Usar una config específica
curl --config mi.curlrc url
Valores por defecto persistentes.