Pega un comando curl y obtén código que funciona
Este convertidor transforma un comando curl en la misma petición HTTP en JavaScript fetch, axios, Node.js, Python requests, Go net/http, la extensión curl de PHP o Rust reqwest. Lee curl igual que lo hacen tu shell y el propio curl: comillas simples y dobles, cadenas $'…', continuaciones de línea, flags combinados como -sSL, datos -d repetidos y campos multipart -F. Los headers, cookies, la autenticación basic y bearer, los cuerpos JSON, los timeouts y los ajustes TLS se trasladan, y se señala todo lo que no se puede traducir. El comando se analiza en tu navegador y nunca se envía a ningún sitio, así que los tokens y cookies que contiene siguen siendo privados.
Cómo convertir un comando curl a código
- 1Copia una petición como curl. En Chrome, Edge o Firefox, abre las herramientas de desarrollo, ve a la pestaña Network, haz clic derecho en una petición y elige Copy › Copy as cURL. Funcionan tanto la variante bash como la de
cmdde Windows. - 2Pega el comando en el panel izquierdo. Los comandos de varias líneas con continuaciones
\o^no son problema. - 3Elige el lenguaje de destino: fetch, axios, Node.js, Python, Go, PHP o Rust, o JSON para ver la petición analizada.
- 4Lee las notas bajo el código sobre flags ignorados o que requieren atención, y luego copia el código o descárgalo como archivo.
Qué se convierte
- Método y URL
- -X/--request, --url, -G/--get (los datos pasan a la query string), -I/--head, -T/--upload-file (PUT). Sin -X, el método se elige como lo hace curl: POST cuando hay cuerpo, GET en caso contrario.
- Headers
- -H/--header, -A/--user-agent, -e/--referer, -b/--cookie y -r/--range. Los headers repetidos se combinan.
- Cuerpos
- -d/--data, --data-raw, --data-binary y --data-urlencode (unidos con &, como hace curl), --json y campos multipart -F/--form, incluidas subidas de archivos con ;type= y ;filename=.
- Autenticación
- -u/--user para basic auth, --digest, --oauth2-bearer y credenciales escritas en la URL.
- Opciones de conexión
- -k/--insecure, -L/--location, --compressed, -m/--max-time y -x/--proxy, cuando el lenguaje de destino tiene un equivalente.
Los cuerpos JSON se convierten en objetos reales
Cuando el cuerpo es JSON, ya sea porque lo indica el Content-Type o porque claramente lo es, se formatea y, si el lenguaje lo permite, se escribe como un valor nativo: un objeto pasado a JSON.stringify para fetch, un objeto simple para axios y un diccionario pasado como json= para Python requests, con true, false y null convertidos en True, False y None. Es mucho más fácil de editar que una cadena escapada. Desactiva Formatear cuerpos JSON para conservar el cuerpo byte a byte tal como estaba.
fetch en el navegador frente a Node.js
Los dos destinos fetch son distintos porque los navegadores restringen lo que una página puede enviar. Un script en el navegador no puede establecer Cookie, Referer, Host, Accept-Encoding ni ningún header Sec-, no puede omitir la verificación de certificados ni leer archivos desde una ruta. El destino de navegador indica qué headers se descartarán. El destino Node.js puede hacer todo eso: los archivos se leen con openAsBlob y readFile, y --insecure o un proxy se convierten en un dispatcher de undici.
Para saber qué significa el estado de la respuesta una vez ejecutada la petición, consulta la referencia de códigos de estado HTTP. Los valores de la query que necesiten escaparse se pueden codificar con el codificador de URL.
Reglas de comillas, resueltas
La mayoría de los errores de conversión vienen de las comillas. En un shell POSIX, las comillas simples conservan todo literalmente, las dobles siguen procesando \" y \$, y $'…' entiende escapes como \n y \x41. Una barra invertida al final de una línea continúa el comando. El cmd de Windows usa en cambio ^ para escapes y continuaciones, que es lo que produce "Copy as cURL (cmd)". El tokenizador sigue cada una de estas reglas, así que el cuerpo que envía tu código es exactamente el que habría enviado curl.
Todo lo que va después de una tubería, un punto y coma o una redirección, como | jq ., pertenece al shell y no a curl, y se ignora con una nota.
Preguntas frecuentes
- ¿Se envía mi comando curl a un servidor?
- No. El comando se analiza y el código se genera en tu navegador. Los tokens, cookies y contraseñas que contiene nunca salen de tu dispositivo.
- ¿Cómo copio una petición como curl desde el navegador?
- Abre las herramientas de desarrollo (F12), selecciona la pestaña Network, haz clic derecho en la petición y elige Copy y luego Copy as cURL. En Windows puedes pegar aquí tanto la versión bash como la cmd.
- ¿Qué opciones de curl se admiten?
- Las opciones que definen una petición: método, URL, headers, cookies, todas las variantes de -d, --json, formularios -F, autenticación -u, -G, -I, -T, -L, -k, --compressed, --max-time y --proxy. Las opciones de salida como -s, -o y -v no afectan a la petición y se ignoran.
- ¿Por qué el código fetch para navegador omite algunos headers?
- Los navegadores prohíben que los scripts establezcan headers como Cookie, Referer, Host y Accept-Encoding, y fetch los descarta sin avisar. Usa el destino Node.js si necesitas enviarlos.
- ¿Cómo se convierten las subidas de archivos?
- Un campo -F como file=@photo.jpg se convierte en un campo de archivo multipart que lee photo.jpg del disco en Node.js, Python, Go, PHP y Rust. En fetch para navegador usa un archivo elegido con un <input type="file">, porque las páginas no pueden leer archivos por ruta.
- ¿Qué hace --data-urlencode?
- Aplica percent-encoding al valor antes de enviarlo, así que name=a b&c se envía como name=a%20b%26c. El convertidor aplica la misma codificación, de modo que el código generado envía los mismos bytes.
- ¿curl sigue las redirecciones?
- Solo si pasas -L. La mayoría de las librerías HTTP siguen las redirecciones por defecto, así que el código generado suele seguirlas de todos modos; la extensión curl de PHP solo lo hace cuando se indica -L.