piapia123
es

Caja de herramientas cURL

Web

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

Un comando curl, tres formas de mirarlo: a código (curl → código de petición en siete lenguajes), analizar (curl → método, dirección, parámetros de consulta, cabeceras y cuerpo, uno por uno) y construir (una petición HTTP en texto → un comando curl). Por qué las tres direcciones están en una sola herramienta: se usan seguidas. Copias un comando de las herramientas de desarrollo, lo analizas para ver qué envía de verdad y lo conviertes a código; o escribes una petición a mano, construyes el curl y lo pegas de vuelta en analizar para comprobar que dice lo que querías. Tres páginas obligarían a volver a pegar el mismo contenido cada vez que cambias de punto de vista. A código cubre siete destinos: fetch en JavaScript, node:https en Node.js, requests en Python, el framework de scraping feapder, cURL en PHP, net/http en Go y HttpClient en Java. Los comandos de varias líneas copiados con «Copy as cURL» del navegador se pegan tal cual: las comillas simples, los escapes dentro de las comillas dobles y las continuaciones con barra invertida se analizan con las reglas del shell, no partiendo por espacios (que rompería -d '{"a": 1}' justo en el espacio de dentro del JSON). Las opciones que no afectan al código generado (--retry, --connect-timeout y compañía) se listan como comentarios al principio, para que veas qué se ha quedado fuera. Analizar hace dos cosas que no encontrarás en otro sitio: enmascara la contraseña de `-u user:pass` (este panel acaba en capturas de pantalla y en pantallas compartidas) y da a `-k` (omitir la verificación del certificado) un aviso rojo propio en vez de enterrarlo en una lista de opciones: no es «una opción», es «esta petición no va a verificar con quién habla». Construir toma un formato de texto en lugar de un formulario: la primera línea lleva el método y la dirección («POST https://…»), y el método se puede omitir, en cuyo caso es GET; todo lo anterior a la línea en blanco son cabeceras y todo lo posterior es el cuerpo. Eso no lo he inventado yo: el REST Client de VS Code y el HTTP Client de JetBrains usan lo mismo. Un formulario no puede expresar un cuerpo arbitrario, y el cuerpo es justo la parte que se quiere pegar.

Funciones

  • Siete destinos: JavaScript (fetch), Node.js (node:https, el único que respeta -k y -u), Python (requests), feapder, PHP (cURL), Go (net/http) y Java (HttpClient)
  • Tres direcciones que comparten un mismo campo de entrada: a código, analizar en campos y construir desde una petición
  • Análisis consciente del shell: comillas simples, escapes dentro de comillas dobles y continuaciones con barra invertida
  • Admite -X, -H, -d / --data-raw, formularios -F, autenticación -u, cookies -b, -A / -e y más
  • -G añade los datos a la cadena de consulta en vez de enviar un cuerpo, igual que curl
  • Entiende tanto los grupos de opciones del estilo -sSL como --opt=value
  • Las opciones no reconocidas se listan como comentarios al principio en vez de descartarse en silencio
  • Analizar: método, dirección, parámetros de consulta, cabeceras y cuerpo listados uno a uno, con los cuerpos JSON embellecidos
  • Analizar: la contraseña de -u va enmascarada, así que el texto en claro de tu comando no vuelve a aparecer en pantalla
  • Analizar: -k recibe un aviso propio en vez de mezclarse con las opciones corrientes
  • Construir: primera línea con el método y la dirección, cuerpo tras una línea en blanco (el formato .http que usa el REST Client de VS Code)
  • Construir: las comillas simples se escapan a la manera del shell (`'\''`), así que un apóstrofo en el cuerpo no puede truncar el comando
  • Parte las cadenas largas a 80 / 100 / 120 columnas con el operador de concatenación del lenguaje (PHP `.`, el resto `+`); partir cambia cómo se escribe una cadena, nunca lo que contiene

Cómo se usa

  1. Elige una dirección: a código, analizar o construir
  2. A código: copia un comando curl de tu terminal o de las herramientas de desarrollo, pégalo y elige el lenguaje de destino
  3. Analizar: pega un comando curl y mira campo por campo qué envía de verdad
  4. Construir: escribe el método y la dirección en la primera línea, luego las cabeceras, una línea en blanco y el cuerpo
  5. Si el código se alarga, pon el corte en 80 o 100 columnas
  6. Los comentarios de arriba del código indican qué opciones se han omitido
  7. Copia el resultado y úsalo

Preguntas frecuentes

¿Por qué no basta con partir el comando por espacios?
Porque un comando curl es una línea de comandos del shell, no una ristra de cadenas separadas por espacios. El espacio dentro de -d '{"a": 1}' es un dato, y las comillas de -H "X: a\"b" son escapes. Partir por espacios corta los argumentos por donde no toca, y el resultado es código que parece del todo normal y envía la petición equivocada: el tipo de fallo más difícil de notar.
¿Por qué el código generado lleva comentarios?
Registran lo que hacía el comando original y el código generado no expresa directamente: -k desactivando la comprobación del certificado, -L siguiendo redirecciones, y opciones como --retry o --connect-timeout que no cambian nada en una sola petición. Se listan para que sepas en qué difiere el código del comando, en vez de que falte algo sin avisar.
¿Se admiten cookies y autenticación Basic?
Sí. Las cookies de -b se separan por punto y coma y se escriben como cabeceras, y -u user:pass se convierte en el modismo propio de cada lenguaje (el parámetro auth en Python, SetBasicAuth en Go) en vez de una cabecera Authorization en Base64 montada a mano.
¿El corte de cadenas largas cambia mis datos?
No. Solo cambia cómo se escribe una cadena, no lo que contiene: una URL de 300 caracteres se parte en varios trozos unidos por el operador de concatenación del lenguaje (`.` en PHP, `+` en los otros seis), y volver a unirlos da el original carácter a carácter: hay pruebas que lo fijan. Se evitan a propósito dos cosas: nunca se parte una secuencia de escape (`\"` separada en `\` y `"` convierte la salida en un error de sintaxis) y nunca se tocan las comillas dentro de los comentarios (las notas de arriba llevan comillas, y tratarlas como cadenas destrozaría el comentario). Así que solo hace falta cuando pegas en código con un límite de longitud de línea.
¿Se sube el comando?
No. El análisis y la generación ocurren en el navegador y la página no envía ninguna petición: los comandos curl suelen llevar cabeceras Authorization y tokens, y nada de eso sale de la máquina.
¿Por qué «Construir» usa un formato de texto y no un formulario?
Porque un formulario no puede expresar un cuerpo de petición arbitrario, y el cuerpo es justo la parte que se quiere copiar y pegar. El formato es: en la primera línea van el método y la dirección, por ejemplo «POST https://api.example.com/users» (el método se puede omitir, y entonces significa GET); después las cabeceras hasta la línea en blanco, y el cuerpo a continuación. Es la convención `.http` que usan el REST Client de VS Code y el HTTP Client de JetBrains, no algo inventado aquí, y tiene una ventaja de propina: puedes pegar una petición entera directamente de una documentación, un ticket o el mensaje de un compañero.
¿Por qué el comando construido ocupa varias líneas?
Por dos razones. Cada opción va precedida de una continuación con barra invertida (una barra al final de la línea y la siguiente continúa) para que una persona pueda leerlo; pegarlo en un terminal o en un script es perfectamente legal. Y los saltos de línea dentro del cuerpo se conservan tal cual dentro de las comillas simples: el shell permite que una cadena entre comillas simples abarque varias líneas, curl lo acepta y ni un carácter del contenido cambia. Si necesitas pegar el resultado en algo que solo lee una línea, únelo tú primero. Aplastar el cuerpo a una línea cambiaría los datos (los saltos de línea en JSON dan igual, pero en firmas, texto plano y formularios puede que no), así que aquí se opta por la fidelidad.
¿Por qué se enmascara la contraseña de -u en el resultado?
Porque este panel acaba en capturas de pantalla, en pantallas compartidas y abierto en una sesión del navegador: el hecho de que tú lo hayas pegado no significa que deba volver a mostrarse en pantalla. La contraseña no participa en ninguna conversión (lo que importa de verdad es que curl la codifica en Base64 dentro de una cabecera Authorization, y la herramienta lo dice justo al lado de la fila), así que enmascararla no te cuesta información. Y una cosa más que conviene decir en alto: el Base64 de la autenticación Basic no es cifrado, equivale a texto plano, así que sobre HTTP se emite a todo el mundo.

Herramientas relacionadas