Analizador de cURL

Se ejecuta en tu navegador; no se sube nada

Lee un comando cURL como la petición que envía y conviértelo en fetch, Python requests o un bash ordenado. No se envía nada.

Command

No command yet

Paste a cURL command on the left, for example from your browser's developer tools (Network tab, right-click a request, Copy as cURL). Nothing is sent: the command is only read.
Ready
Ln 1, Col 1

¿Qué es un comando cURL?

cURL es un programa de línea de comandos para enviar peticiones HTTP, y un comando cURL es la forma más habitual de compartir una petición entre desarrolladores. Una sola línea contiene todo lo que recibe el servidor: el método después de -X, la URL, cada cabecera después de -H y el cuerpo después de -d.

Los comandos cURL aparecen por todas partes en el trabajo con APIs. La documentación de las APIs muestra los ejemplos en cURL, las herramientas de desarrollo del navegador ofrecen Copy as cURL en cualquier petición de red, y los informes de errores suelen incluir uno para que el problema se pueda repetir exactamente.

curl añade partes de la petición que el comando no escribe, y esas son las que pillan desprevenido a más de uno. -d convierte un GET en un POST y envía Content-Type: application/x-www-form-urlencoded, así que un cuerpo JSON sin un Content-Type JSON llega al servidor como formulario. Varias opciones -d se unen con &. -G pasa los datos al query string, y -u user:password se convierte en una cabecera Authorization de tipo Basic. El analizador muestra esas cabeceras y marca qué opción las añadió.

Cómo usar esta herramienta

  1. 1Pega un comando en el panel Command o elige uno de Examples. Los comandos copiados de Chrome o Firefox funcionan tal cual, incluido Copy as cURL (cmd) de Windows con sus escapes ^, y los comandos de PowerShell con continuaciones de línea con acento grave.
  2. 2Lee la petición en la pestaña Request: el método y por qué curl lo usa, la URL separada en partes, los parámetros de consulta, las cabeceras, el cuerpo (el JSON se formatea sin cambiar ningún valor) y las opciones que el analizador lista pero no interpreta.
  3. 3Las notas de arriba de la pestaña Request señalan cosas que conviene saber, como un cuerpo JSON enviado como formulario. Show, o F8, pone el cursor en la opción correspondiente.
  4. 4Abre la pestaña Code para obtener la misma petición en JavaScript fetch, Python requests o un comando bash ordenado en varias líneas, y cópiala.
  5. 5Tidy (Shift+Alt+F) reescribe el comando del editor como bash, con una opción por línea. Ctrl+Z lo deshace.

Solución de problemas

Comilla simple sin cerrar, o comilla doble sin cerrar
Una comilla se abre y no se cierra nunca, así que el resto del comando se lee como un solo argumento. En bash, una comilla simple no puede aparecer dentro de '…'; escríbela como '\'' o usa $'…'. El editor marca dónde se abre la comilla.
No se encontró ninguna URL
Todos los argumentos se leyeron como opciones o como valores de opciones. Comprueba que la URL está y no queda dentro de una comilla sin cerrar, y que opciones como -o o -u tienen su propio valor antes de la URL.
El cuerpo parece JSON pero se envía como formulario
-d sin Content-Type hace que curl envíe application/x-www-form-urlencoded. Añade -H "Content-Type: application/json", o usa --json, que fija tanto Content-Type como Accept.
La URL contiene [ ] o { }
curl los trata como un patrón y envía varias peticiones, una por cada valor. Añade -g (--globoff) para enviarlos tal cual.
Esto es un comando wget, no curl
El analizador solo lee curl. Un comando copiado como PowerShell desde el navegador usa Invoke-WebRequest; elige Copy as cURL en su lugar.

Preguntas frecuentes

¿Se envía mi comando a algún sitio?

No. El comando se analiza en tu navegador y no se hace ninguna petición. Eso importa porque los comandos copiados suelen contener tokens y cookies reales. El comando se guarda en el almacenamiento de sesión de esta pestaña hasta que lo borras o cierras la pestaña; Copy link lo pone en el enlace después de # (nunca se envía a un servidor), así que revisa que no lleve credenciales antes de compartirlo.

¿Qué opciones de cURL entiende el analizador?

Las que cambian la petición: -X, -H, -d y sus variantes (--data-raw, --data-binary, --data-urlencode), --json, -F, -G, -I, -T, -u, -b, -A, -e, --oauth2-bearer, -L, -k, -m y --compressed. Las opciones cortas se pueden combinar, como en -sSL, o llevar el valor pegado, como en -XPOST. Las demás opciones se listan con lo que hacen, y las desconocidas también se listan en lugar de descartarse.

¿Por qué muestra POST si mi comando no tiene -X?

curl envía un POST siempre que un comando tiene cuerpo (-d, --json o -F) y ningún método explícito, y el analizador sigue la misma regla. -G envía los datos como query string con GET, y -I envía HEAD.

¿Puede leer archivos referenciados con @, como -d @body.json?

No. El analizador se ejecuta en el navegador y no puede leer archivos de tu ordenador, así que muestra el nombre del archivo y una nota. Pega el contenido del archivo con --data-raw para ver el cuerpo.

¿Qué tan exacto es el código generado?

El método, la URL, las cabeceras y el cuerpo son los mismos, y el cuerpo se envía como la misma cadena, sin volver a codificarlo. Algunas opciones de curl no tienen equivalente: fetch no puede saltarse la comprobación de certificados como -k, y los navegadores no dejan que fetch fije una cabecera Cookie. El código generado lo dice en un comentario donde importa. El código Python pasa allow_redirects=False salvo que el comando tenga -L, porque curl no sigue redirecciones por defecto.