Saltar al contenido

🌀 Conversor cURL ⇄ fetch / axios / wget

Convierte comandos cURL a código de petición HTTP en varios lenguajes y librerías. Headers, cookies y body preservados.

100% Gratis Sin registro Solo navegador 5 idiomas Modo oscuro

Opciones cURL Soportadas

-X, --request
-H, --header
-d, --data
--data-raw
--data-binary
--data-urlencode
-u, --user
-b, --cookie
-A, --user-agent
-e, --referer
-F, --form
--compressed
-k, --insecure
-L, --location
-I, --head

🔗 Herramientas relacionadas

📖 Dónde se suele tropezar

Convierte un comando cURL en trece formas de codigo: fetch, axios, Python requests, PHP, Go, Rust, wget, HTTPie y mas. Las cabeceras, las cookies y el cuerpo se conservan tal cual, y todo se ejecuta en el navegador. Conservarlo todo tal cual es el valor de esta herramienta y a la vez su mayor advertencia: un cURL copiado desde las herramientas de desarrollo del navegador lleva consigo tu sesion iniciada. Y muchas de las cabeceras que enviaba el navegador no son cabeceras que deba enviar tu codigo. Una conversion que funciona pero cuyo resultado no funciona al pegarlo suele deberse a una de esas dos cosas.

Caso Qué ocurre Qué hacer
El cURL copiado lleva tus credenciales tal cual El comando Copy as cURL de las herramientas de desarrollo escribe todas las cabeceras que la peticion envio de verdad: tu identificador de sesion esta en la cabecera Cookie y tu token de acceso en Authorization, ambos en texto plano. Esa cadena basta para iniciar sesion como tu. Lo peligroso es que ese cURL adopta una forma que invita a compartirlo: lo pegas en un ticket como pasos de reproduccion, se lo mandas a un companero por Slack, lo publicas en una entrada de blog o lo pegas en una IA para preguntar por que no funciona. Todas esas acciones sacan fuera una sesion activa. Y como parece un fragmento mas de un comando largo, quien lo pega no se da cuenta. Borra las lineas Cookie y Authorization antes de compartir. Esta pagina se ejecuta por completo en tu navegador, de modo que pegar aqui es seguro en si mismo, pero el codigo generado contiene los mismos valores: el problema vuelve en cuanto copias esa salida a otro sitio. En la practica, si vas a escribir codigo que llama a una API, reconstruye primero la autenticacion por tu cuenta: lo correcto es usar una clave de API o una cuenta de servicio emitida para esa API, no la cookie de sesion de tu navegador. Si ya has compartido uno, invalida esa sesion cerrandola o rotando el token: "seguramente nadie lo miro" no es un remedio.
Llevar las cabeceras del navegador tal cual a tu codigo Entre las cabeceras que copia DevTools hay muchas que son asunto del navegador y no de la API: sec-ch-ua, sec-fetch-mode, Accept-Encoding, Connection, Content-Length, Host, Referer y demas. Corresponden al cliente HTTP gestionarlas automaticamente, y fijarlas a mano rompe cosas: si arrastras un Content-Length fijo, se desincroniza en cuanto cambias el cuerpo, y si declaras Accept-Encoding: gzip de forma explicita, algunas bibliotecas dejan de descomprimir y te devuelven bytes comprimidos en crudo. En el navegador hay mas: Origin, Referer, Cookie y otras son cabeceras prohibidas, de modo que fetch las descarta en silencio: no se lanza ningun error, asi que el comportamiento cambia mientras tu crees haberlas puesto. Despues de convertir, reduce las cabeceras al minimo. Lo que de verdad necesitas suelen ser cinco cosas: metodo, URL, Content-Type, autenticacion y cuerpo. Recorta primero, ejecuta y devuelve solo lo que se rompa: hacerlo en ese orden te dice que cabeceras hacen falta de verdad. User-Agent es la que a veces si hace falta, porque algunas API rechazan los valores por defecto. Y si vas a ejecutarlo en un navegador, comprueba antes el CORS: cURL queda fuera de la politica del mismo origen, asi que es normal que una peticion que funciona en cURL falle bajo fetch. Eso es un problema de Access-Control-Allow-Origin en el servidor, no de tu codigo, y no se resuelve retocando la conversion.
El entrecomillado del shell altera el cuerpo Un comando cURL se apoya en la sintaxis del shell, de modo que el mismo comando entrega contenidos distintos segun el shell. El cmd.exe de Windows no trata las comillas simples como entrecomillado, asi que -d '{"a":1}' llega al servidor con las comillas incluidas. En PowerShell 5.1, curl es un alias de Invoke-WebRequest, con lo que las opciones de cURL no se aplican en absoluto. Un cuerpo con texto no ASCII es todavia peor: enviado desde bash en Windows, algunos entornos lo codifican en la pagina de codigos local en lugar de en UTF-8, y aparece como caracteres ilegibles en el servidor mientras el comando informa de exito. Y una mas: -d interpreta como nombre de archivo un valor que empiece por @, y ademas elimina los saltos de linea: pega un JSON formateado y quedara aplastado en una sola linea. Pon el cuerpo en un archivo y envialo con --data-binary @body.json. --data-binary envia los saltos de linea y la codificacion de bytes exactamente como estan, sin dejar espacio a que el shell intervenga: para probar JSON con texto no ASCII, es el unico metodo fiable. En Windows, escribir curl.exe con la extension lanza el cURL de verdad incluso desde PowerShell. Mas a fondo: cURL es una herramienta para ejecutar algo una vez y comprobarlo, no para un procedimiento que repites: si vas a dejar constancia de un procedimiento, versiona el codigo convertido. El codigo se puede comparar, revisar y probar.

Lo que se convierte es una sola peticion. Buena parte de lo que exige el uso real de una API no aparece en un comando cURL: reintentos, tiempos de espera, gestion de limites de tasa, paginacion, manejo de errores, reutilizacion de conexiones. Si llevas el codigo generado a produccion tal cual, todo eso falta. Los tiempos de espera sobre todo: los valores por defecto difieren enormemente entre lenguajes y algunos esperan indefinidamente, asi que fija siempre uno de forma explicita. Otra cosa: cURL no sigue redirecciones por defecto (necesita -L), mientras que muchas bibliotecas HTTP si: es una razon clasica de que la misma URL parezca comportarse de otro modo. Y ten especial cuidado al convertir un cURL que lleve -k o --insecure: esa opcion desactiva la verificacion del certificado TLS, y arrastrarla a produccion te deja indefenso ante un atacante interpuesto. Arregla la causa del error de certificado en lugar de apagar la verificacion.

📖 Cómo usar

  1. 1
    Copia desde DevTools
    En DevTools Network, clic derecho → Copy as cURL.
  2. 2
    Pega el cURL
    Pega el comando cURL.
  3. 3
    Elige el lenguaje
    Elige entre 13 destinos; headers, cookies, body se preservan.

❓ Preguntas frecuentes

¿Es compatible con Copy as cURL de DevTools?
Sí. Compatible con la salida de Chrome/Firefox.
Quiero urllib en lugar de requests
Elige "Python (urllib)" para salida solo con stdlib.
¿Cómo se maneja -F?
Se convierte a la forma idiomática de cada lenguaje.
¿Dónde gestionar el token Authorization?
En producción usa variables de entorno o Secrets Manager.
🐛 ¿Encontró un problema con esta herramienta?

Gratis, sin registro. Incluso solo los pasos para reproducir ayudan. Los informes van directamente al operador y se usan para corregir.

* Se envía automáticamente la info del navegador (UA / pantalla / idioma / URL) para reproducir