Caja de herramientas cURL
WebTodo se ejecuta en tu navegador: no se sube nada
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
- Elige una dirección: a código, analizar o construir
- A código: copia un comando curl de tu terminal o de las herramientas de desarrollo, pégalo y elige el lenguaje de destino
- Analizar: pega un comando curl y mira campo por campo qué envía de verdad
- 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
- Si el código se alarga, pon el corte en 80 o 100 columnas
- Los comentarios de arriba del código indican qué opciones se han omitido
- 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
Analizador de URL
WebDescompone una URL en esquema, host, puerto, ruta, parámetros y ancla, con cada parámetro en crudo y decodificado. Todo en tu navegador.
JSON a código
FormatoConvierte una muestra JSON en interfaces de TypeScript, structs de Go, clases de Java o structs de Rust; las claves que faltan salen opcionales.
Probador de regex
TextoPrueba expresiones regulares en el navegador: resaltado en vivo, grupos de captura, vista previa de sustitución y código para cinco lenguajes.
Analizador de UA
WebAnaliza un User-Agent: navegador, versión, sistema, tipo de dispositivo y motor, con las reglas que coinciden. Solo coincidencia de patrones.
Códigos de estado HTTP
WebConsulta un código de estado HTTP: significado, clase 1xx–5xx, usos típicos y trampas habituales. También busca por palabra clave. Todo local.
Tipos MIME
WebConsulta el tipo MIME a partir de una extensión, o la extensión por defecto de un tipo de medio. Solo los habituales. Todo en tu navegador.