Guia de cURL
Herramienta de linea de comandos. Ya viene instalado en Mac, Linux y Windows 10+. Ideal para scripts, servidores y CI/CD.
cURL (Client URL) es la herramienta de linea de comandos mas antigua y usada para hacer requests HTTP. Existe desde 1997, funciona en cualquier sistema operativo, y es lo que usa internamente Postman/Insomnia cuando les pides "Generate cURL code".
¿Por que aprenderlo? 1) Esta en todos lados: cualquier servidor Linux, Mac, Docker, etc lo trae preinstalado. 2) Es perfecto para scripts: puedes hacer `curl | jq` para extraer un campo especifico. 3) Es lo que ves en tutoriales: 90% de los tutoriales tecnicos usan cURL como ejemplo. 4) Funciona en CI/CD: en GitHub Actions, GitLab CI, Jenkins, etc. donde no hay interfaz grafica.
En esta guia abrimos una terminal, copiamos un comando cURL pre-armado de la documentacion, y aprendemos a leer la respuesta.
Conceptos que necesitas saber
Terminal / Shell
Una ventana donde escribes comandos de texto en vez de hacer click. En Windows se llama "cmd" o "PowerShell". En Mac/Linux se llama "Terminal" o "Bash". Es como el "DOS" de los 90, pero moderno.
HTTP method
El verbo de la peticion. GET = pedir datos. POST = enviar datos para crear. PUT = actualizar. DELETE = borrar. En cURL se especifica con -X GET, -X POST, etc.
Header
Metadata de la peticion. En cURL se especifican con -H "Nombre: Valor". Van ANTES del body.
Body / Payload
Los datos que envias al servidor. En cURL se especifica con -d "..." (para POST) o --data-binary @archivo.json (para JSONs grandes).
Pipe (|)
El caracter | manda el output de un comando a otro. Por ejemplo: curl https://api.com | jq .data.nombre extrae solo el campo "nombre" del JSON.
jq
Una herramienta externa (opcional) que formatea y filtra JSON. Si la instalas (brew install jq o apt install jq), `curl ... | jq .` formatea la respuesta con colores.
Paso a paso
-
1
Que es cURL y por que aprenderlo
cURL existe desde 1997, es open source, y viene preinstalado en Mac, Linux, Windows 10+ y Windows 11. Saber usarlo es como saber usar Excel: no es glamorous pero es super util y todos los developers lo terminan necesitando.
-
2
Abre una terminal
Windows: presiona Win+R, escribe "cmd" o "powershell", Enter. Mac: Cmd+Espacio, escribe "Terminal", Enter. Linux: Ctrl+Alt+T (en la mayoria de distros).
-
3
Verifica que tienes cURL instalado
Escribe: curl --version y presiona Enter. Deberias ver algo como "curl 7.81.0" seguido de las caracteristicas. Si dice "comando no encontrado", tienes Windows 7 o anterior: descarga cURL de curl.se/windows.
-
4
En otra ventana, ve a /docs/ y abre cualquier endpoint
Por ejemplo https://api.cfdi4.com/docs/endpoints. Cada endpoint tiene un boton "cURL" que copia el comando al portapapeles.
-
5
Click en el boton "cURL" de un endpoint
Esto copia un comando largo a tu portapapeles. Se ve asi: curl -X POST https://api.cfdi4.com/api/v1/usuario/datos-fiscales -H "User-Agent: MiApp/1.0" -H "Authorization: Bearer sat_xxxxx" -H "Content-Type: application/json" -d '{"rfc":"XAXX010101000"}'
-
6
Reemplaza "sat_xxxxx" con tu API key real
Pega el comando en un editor de texto (Notepad, VSCode), busca "sat_" y reemplaza toda la string con tu API key real.
-
7
Pega el comando modificado en tu terminal y presiona Enter
Veras una explosion de texto JSON. Eso es la respuesta del servidor.
-
8
Para ver la respuesta formateada con colores, instala "jq"
Mac: brew install jq. Ubuntu/Debian: sudo apt install jq. Windows: descarga de https://stedolan.github.io/jq/download/
-
9
Pipe la respuesta a jq para formatearla
Agrega | jq al final del comando: curl ... | jq. Veras el JSON con colores, identado y collapsible. Mucho mas legible.
-
10
Para guardar la respuesta en un archivo, agrega -o archivo.json
curl ... -o respuesta.json guarda el JSON sin imprimirlo. Util para analisis posterior o para automatizar.
-
11
Para ver solo el tiempo de respuesta, agrega -w "%{time_total}"
curl -o /dev/null -s -w "Tiempo: %{time_total}s\n" https://api.cfdi4.com/health. El flag -o /dev/null descarta el body, -s es silent mode.
-
12
Para ver los headers de respuesta, agrega -i
curl -i https://api.cfdi4.com/health. La "-i" (include headers) muestra los headers HTTP antes del body. Util para debuggear caching, CORS, etc.
-
13
Para hacer un POST con body desde archivo, usa --data-binary @archivo
Crea un archivo body.json con tu JSON, despues: curl -X POST ... --data-binary @body.json. Util cuando el JSON es muy largo o tiene caracteres especiales.
-
14
Para repetir el request cada 5 segundos (monitoreo), usa watch + curl
watch -n 5 "curl -s https://api.cfdi4.com/health | jq". watch viene preinstalado en Mac/Linux. En Windows puedes usar un loop bash o un script.
-
15
Para seguir redirects (3xx), usa -L
Por defecto cURL NO sigue redirects. Si el servidor responde 301 o 302, veras el codigo pero no el body final. Agrega -L (location) para seguirlos.
-
16
Para ignorar errores SSL (NO recomendado en produccion), usa -k
En desarrollo local con certificados self-signed, cURL falla con error SSL. -k los ignora. NUNCA uses -k en produccion: es un riesgo de seguridad.
-
17
Crea un script bash con tus comandos favoritos
Crea un archivo test.sh con varios curls: #!/bin/bash; curl -s https://api.cfdi4.com/health; echo ""; curl -s -X POST ... Dale permisos con chmod +x test.sh y ejecutalo cuando quieras.
Verificar que funciona
Si todo salio bien, deberias ver una respuesta JSON con cfdi_codigo: 1. Si ves error 401, revisa que tu API key este bien copiada (sin espacios al inicio/final).
{
"cfdi_codigo": 1,
"cfdi_texto": "OK",
"data": { ... }
}
Problemas comunes
Error 401: Unauthorized
Tu API key no es valida o no la pusiste bien. Revisa que: 1) Empiece con sat_, 2) No tenga espacios, 3) El RFC este activo en el panel.
Error 403: Forbidden
Tu user-agent es muy generico. Anade -H \"User-Agent: MiApp/1.0\" a tu peticion.
Error 429: Too many requests
Superaste el rate limit (60 req/min). Espera 60 segundos.
Error 500: Internal server error
El upstream del SAT esta teniendo problemas. Reintenta en unos minutos. Si persiste, contactanos.
Error 503: Service unavailable
El sistema esta en mantenimiento. Revisa panel.cfdi4.com para avisos.
No me aparece la coleccion al importar
Asegurate de usar la URL exacta. Algunos clientes requieren la spec OpenAPI, otros la coleccion Postman. Revisa el paso correspondiente.