logo
GeekFormat

Generador de código cURL

Entrada de cURL

Pega un comando cURL para analizar automáticamente la URL, el método, las cabeceras y el cuerpo de la solicitud.

Solicitud analizada

https://api.example.com/items1 cabecera(s)Cuerpo: 15 caracterescurlToCode.flag.followRedirects

Código generado

curlToCode.target.fetch

Pega el comando curl y obtén código de petición HTTP ejecutable en 11 lenguajes en segundos.

Relacionado

Casos de uso

  • Después de hacer clic derecho en una petición en el panel Network de Chrome DevTools y seleccionar «Copy as cURL», pégalo en esta herramienta para convertirlo directamente al código del lenguaje que usa tu proyecto, 10 veces más rápido que escribir la petición a mano
  • Al depurar APIs de terceros cuando la documentación da ejemplos curl, conviértelos rápidamente a código Python requests/Java OkHttp/C# HttpClient para integrarlos en tu proyecto
  • Al depurar interfaces de entorno de producción, copia comandos curl desde herramientas de captura (Charles/mitmproxy/Wireshark) y conviértelos a código de prueba unitaria para verificar directamente
  • Al escribir documentación de API, cambia rápidamente entre ejemplos de múltiples lenguajes, proporcionando ejemplos de código listos para ejecutar a lectores de diferentes stacks tecnológicos
  • Al solucionar problemas de peticiones en producción, usa curl para reproducir el problema y luego conviértelo a código para enviarlo a colegas o crear un Issue, facilitando que otros lo reproduzcan directamente
  • En desarrollo multilenguaje (por ejemplo, pasar de un proyecto Python a Go), convierte rápidamente peticiones curl existentes a código de cliente HTTP del nuevo lenguaje, ahorrando tiempo de consulta de documentación
  • En scripts Shell convierte comandos curl a PowerShell Invoke-RestMethod para colegas de operaciones Windows, o viceversa
  • Aprende el protocolo HTTP: comparando el código que implementa la misma petición en diferentes lenguajes, comprende las diferencias de API de las bibliotecas cliente HTTP
  • Convierte rápidamente curl -X POST -d 'json' a código con Content-Type correcto y serialización JSON, evitando errores de concatenación de cadenas a mano
  • Cuando necesites llamar a APIs en scripts CI/CD, convierte comandos curl depurados localmente a código del lenguaje de script correspondiente para integrarlo en el pipeline

Características

  • 11 lenguajes/bibliotecas objetivo: cubre frontend (JS fetch/Axios), Node.js (node-fetch), Python (requests/httpx), Go (net/http), PHP (cURL), Java (OkHttp), C# (HttpClient), PowerShell (Invoke-RestMethod), línea de comandos (wget), todos los stacks tecnológicos principales
  • Análisis inteligente de comandos curl: reconoce automáticamente URL, método HTTP, cabeceras, cuerpo, admite comillas simples/dobles, escape con barra invertida, comandos multilínea (barra invertida al final de línea)
  • Soporte completo para parámetros curl comunes: -X/--request método, -H/--header cabecera, -d/--data/-F formulario/cuerpo JSON, -u/--user autenticación Basic, -A/--user-agent UA, -b/--cookie Cookie, -e/--referer Referer, -L/--location seguir redirecciones, --compressed descompresión automática, -k/--insecure omitir verificación de certificado, -I/--head petición HEAD
  • Reconocimiento inteligente de cuerpo JSON: detecta Content-Type application/json y serializa automáticamente con JSON.parse/JSON.stringify/requests(json=)/json=, generando código que usa objetos directamente en lugar de cadenas, más idiomático
  • Conversión automática de autenticación Basic: al detectar -u user:pass genera automáticamente la cabecera Authorization: Basic <base64>, usando mecanismos nativos de autenticación en cada lenguaje (Python auth=, OkHttp credentials, C# credentials, etc.)
  • Insignias de indicadores de seguridad: detecta automáticamente parámetros como --compressed/-L/-k/-u, mostrándolos con insignias visibles en los resultados del análisis
  • Cambio manual de método HTTP: después de analizar automáticamente el método curl, permite cambiar manualmente el método en el desplegable (GET/POST/PUT, etc. 7 tipos), viendo el código correspondiente al instante
  • Escape de cadenas seguro: al generar código para cada lenguaje usa literales de cadena nativos (comillas triples/barra invertida en Python, acentos invertidos en Go, @"" en C#, comillas simples en PHP, comillas dobles escapadas en Java), evitando errores de sintaxis
  • Avisos de error de análisis: cuando se introduce un comando curl inválido (falta URL, no empieza por curl, POST sin body, etc.) muestra un aviso naranja indicando el problema específico
  • 3 ejemplos con un clic: proporciona 3 ejemplos típicos: GET+autenticación Token, POST+JSON, autenticación Basic+seguir redirecciones, para ver rápidamente la capacidad de la herramienta
  • Limpiar entrada con un clic: el botón Clear restablece rápidamente, sin residuos al pegar nuevos comandos
  • Procesamiento 100% local: los comandos curl y el contenido de las peticiones se analizan y convierten completamente en el navegador, no se suben a ningún servidor, los tokens/contraseñas sensibles no se filtran
  • Copiar código con un clic: después de generar el código haz clic en el botón Copy para copiar al portapapeles, pégalo directamente en tu proyecto y ejecútalo
  • Adaptación de modo inseguro HTTPS: el parámetro -k/--insecure genera la configuración correspondiente de omisión de verificación de certificado TLS en Node/Go/Python/PHP/C#/PowerShell (wget usa --no-check-certificate, C# muestra aviso ServicePointManager, Node establece NODE_TLS_REJECT_UNAUTHORIZED)

Cómo Usar

  1. Obtén el comando curl: en el panel Network de DevTools del navegador haz clic derecho en la petición → Copy → Copy as cURL (bash); o exporta cURL desde herramientas de captura como Postman/Charles/mitmproxy; o escribe el comando curl a mano
  2. Pega en el cuadro de entrada: pega el comando curl en el área de entrada superior, admite comandos de una o varias líneas (con barra invertida de continuación), eliminando automáticamente los saltos de línea
  3. Haz clic en botones de ejemplo para referencia: si no estás familiarizado con el formato puedes hacer clic en «Ejemplo 1/2/3» para cargar comandos curl preestablecidos y ver el efecto
  4. Ver resultados del análisis: el área de resultados mostrará URL, número de cabeceras, caracteres del cuerpo, e insignias de compresión/redirección/omitir certificado/autenticación Basic, mostrando avisos naranjas si hay problemas
  5. Ajusta el método si es necesario: si el método reconocido automáticamente es incorrecto (por ejemplo, curl no tiene -X POST pero debería ser POST), cambia manualmente el método HTTP en el desplegable
  6. Selecciona el lenguaje objetivo: en el área de código objetivo haz clic en el botón del lenguaje correspondiente (fetch/Axios/Python requests/Go/PHP/Java/C#/PowerShell/wget, etc.)
  7. Copia el código: haz clic en el botón «Copiar código», pégalo en tu proyecto/terminal y ejecútalo

Preguntas Frecuentes

¿Para qué sirve la herramienta de conversión de cURL a código? ¿Por qué no usar directamente el comando curl?

Llamar directamente a comandos curl en el código (como shell_exec, subprocess.run) requiere iniciar subprocesos, es inseguro y difícil de manejar errores, obtener cabeceras de respuesta, hacer conversiones de tipos. El código de producción debería usar clientes HTTP nativos del lenguaje de programación (Python requests, Java OkHttp, JS fetch, etc.). El valor de curl-to-code es traducir automáticamente los comandos curl que copias desde DevTools/herramientas de captura al código de cliente HTTP del lenguaje correspondiente, ahorrándote el trabajo mecánico de consultar documentación de API, escapar comillas manualmente, procesar JSON/autenticación, etc., copia y pega para ejecutar.

¿Qué lenguajes/bibliotecas objetivo son compatibles?

Actualmente son compatibles 11 objetivos: JavaScript fetch (nativo del navegador), Axios (biblioteca HTTP universal Node/navegador), Node.js node-fetch, Python requests (biblioteca HTTP más popular de Python), Python httpx (biblioteca HTTP de nueva generación compatible con HTTP/2 y asíncrona), Go net/http (biblioteca estándar de Go), extensión PHP cURL, Java OkHttp (biblioteca de alto rendimiento universal Android/backend), C# HttpClient (cliente HTTP estándar de .NET), PowerShell Invoke-RestMethod (común en scripts de automatización Windows), wget (herramienta de descarga por línea de comandos). Si el lenguaje que necesitas no está en la lista (como Ruby, Rust reqwest, Dart http, Swift URLSession, etc.), puedes enviar comentarios en la página, lo añadiremos según la demanda.

¿Cómo copiar el comando curl desde Chrome DevTools?

Pasos: 1. Abre Chrome/Edge, presiona F12 para abrir DevTools; 2. Cambia al panel Network; 3. Actualiza la página o dispara la petición objetivo; 4. Encuentra la petición objetivo en la lista de peticiones (puedes filtrar por XHR/JS); 5. Haz clic derecho en la petición → Copy → selecciona «Copy as cURL (bash)» (recomendado versión bash, mejor compatibilidad); 6. Pega en el cuadro de entrada de esta herramienta. Ten cuidado de no seleccionar Copy as fetch (eso es código JS no curl). Firefox/Safari funcionan de forma similar, todos tienen la opción Copy as cURL.

El manejo de comillas en comandos curl es complicado, ¿qué formatos son compatibles?

La herramienta reconoce comillas simples, comillas dobles, escape con barra invertida estilo bash; comillas dobles+escape ^ de Windows cmd; escape con acento invertido de PowerShell básicamente. Se recomienda usar formato bash (envuelto en comillas simples). Los comandos multilínea (con barra invertida \ de continuación) también admiten pegado, la herramienta elimina automáticamente saltos de línea y caracteres de continuación. Si tu comando curl es especialmente complejo (contiene variables de shell, sustitución de comandos $(...), tuberías |, etc.), se recomienda ejecutar primero el comando echo en el terminal para imprimir el curl real expandido y luego copiar, o simplificar manualmente primero (sustituir variables por valores reales).

¿Por qué al enviar JSON con -d en curl el servidor recibe datos ilegibles/400?

Este es uno de los errores más comunes de curl. La opción -d/--data de curl tiene Content-Type por defecto application/x-www-form-urlencoded (formato formulario), no application/json. Si haces directamente curl -d '{"name":"demo"}' url, el servidor lo analizará como formulario (fallo de análisis o datos vacíos). Debes añadir explícitamente la cabecera -H "Content-Type: application/json" para enviar JSON correctamente. Esta herramienta muestra un aviso naranja cuando detecta cuerpo pero sin Content-Type.

¿El código generado se puede copiar y ejecutar directamente? ¿Qué dependencias necesito instalar?

El código de la mayoría de lenguajes se puede ejecutar directamente usando bibliotecas estándar (fetch/Go net/http/PHP cURL/C# HttpClient/PowerShell/wget son integrados), no requiere instalación adicional. Otros requieren bibliotecas de terceros: Axios (requiere npm install axios), node-fetch (requiere npm install node-fetch, Node 18+ tiene fetch integrado sin instalación), Python requests (pip install requests), Python httpx (pip install httpx), Java OkHttp (requiere importar dependencia okhttp3 con Maven/Gradle). El código por defecto imprime el código de estado y texto de la respuesta, puedes modificar la lógica de procesamiento según necesites.

¿Es compatible con la subida de archivos multipart/form-data (parámetro -F)?

Soporte básico: el parámetro -F se reconoce como cuerpo de petición (body), pero el código generado actualmente trata @file como cadena literal en lugar de subida de archivos real. La subida de archivos requiere leer el contenido del archivo local, los métodos de procesamiento varían mucho entre lenguajes (JS usa FormData/FormData.append, Python usa parámetro files=, Go usa multipart.Writer). Se recomienda, sobre la base del código generado por la herramienta, consultar la documentación de subida de archivos de la biblioteca correspondiente para hacer ajustes. Versiones posteriores mejorarán el soporte de multipart.

¿Se subirán mis comandos curl y datos sensibles?

Absolutamente no. Todo el proceso de análisis y generación de código se completa 100% localmente en tu navegador (JavaScript puramente de frontend), los comandos curl, Tokens/Cookies/contraseñas en las cabeceras, datos en el cuerpo de la petición no se envían a ningún servidor. Puedes usar esta herramienta sin conexión, no te preocupes por filtraciones de información sensible.

¿Cómo se maneja -k/--insecure para omitir verificación de certificado en el código de cada lenguaje?

Al detectar el parámetro -k, esta herramienta genera la configuración correspondiente de omisión de verificación de certificado para cada lenguaje objetivo: Python requests/httpx usa verify=False; Node.js establece process.env.NODE_TLS_REJECT_UNAUTHORIZED='0'; Go crea tls.Config{InsecureSkipVerify: true} personalizado; PHP establece CURLOPT_SSL_VERIFYPEER=false y CURLOPT_SSL_VERIFYHOST=0; Java OkHttp requiere TrustManager personalizado (se añade aviso en comentario en el código, porque el código es largo); C# puede personalizar ServerCertificateCustomValidationCallback; PowerShell usa -SkipCertificateCheck (PS6+); wget usa --no-check-certificate; fetch del navegador no puede omitir certificados (restricción de seguridad del navegador, se añade comentario explicativo en el código). Nota: estas configuraciones solo son para pruebas de desarrollo local, nunca desactives la verificación de certificados en producción.

¿Por qué el código Go generado no sigue redirecciones? ¿Con -L debería seguirlas?

El comportamiento por defecto de net/http de Go es no seguir redirecciones (coincide con el comportamiento por defecto de curl, curl debe añadir explícitamente -L para seguir). La herramienta, al detectar el parámetro -L, genera un client vacío (http.Client{} con CheckRedirect nil por defecto, es decir sigue 10 redirecciones); sin -L genera un client con CheckRedirect devolviendo http.ErrUseLastResponse, no sigue redirecciones (coincide con el comportamiento de curl sin -L). Si quieres que Go siga redirecciones siempre, puedes usar directamente http.DefaultClient en el código o personalizar Client{Timeout: ...}.

¿Cómo manejar peticiones que requieren inicio de sesión/con Cookies?

Hay dos formas:①Copiar curl directamente desde DevTools del navegador con sesión iniciada (recomendado): clic derecho en la petición→Copy as cURL, así cookies/cabeceras se incluyen automáticamente, pega y convierte para ejecutar directamente;②En curl especifica manualmente el valor de Cookie con -b/--cookie (-b 'sessionid=abc; token=xyz'), especifica autenticación Basic con -u/--user, especifica Bearer Token con -H "Authorization: Bearer xxx", la herramienta convierte estas cabeceras tal cual. Nota: las Cookies copiadas desde el navegador tienen caducidad, pueden expirar después de unas horas y necesitar volver a copiar.

¿Por qué el cuerpo JSON en Python requests usa el parámetro json= en lugar de data=?

El parámetro data de la biblioteca Python requests codifica dict como application/x-www-form-urlencoded, envía string tal cual, mientras que el parámetro json serializa automáticamente dict/lista como cadena JSON y establece automáticamente la cabecera Content-Type: application/json (si no la has establecido manualmente). Esta herramienta, al detectar que Content-Type contiene application/json y el body es JSON válido, analiza automáticamente el JSON como dict de Python y usa el parámetro json=, así el código es más conciso, no necesitas json.dumps manualmente, y no olvidas la cabecera Content-Type. Los body no JSON (formulario/XML/texto plano) usan el parámetro data= para enviar la cadena original.

El comando curl es muy largo con muchas cabeceras, ¿qué hago si el código generado lleva todas las cabeceras?

El comando curl copiado desde DevTools incluirá muchas cabeceras añadidas automáticamente por el navegador (Host, Connection, Accept, Accept-Encoding, Accept-Language, Sec-Fetch-*, sec-ch-ua, Upgrade-Insecure-Requests, etc.), la mayoría de estas cabeceras no necesitan configurarse explícitamente en el código (los clientes HTTP añadirán automáticamente valores por defecto razonables, como Accept-Encoding, Connection, Host, Content-Length, etc.). Se recomienda, después de copiar el código generado, eliminar manualmente las cabeceras innecesarias, conservando al menos: Content-Type, Authorization, Cookie (si es necesario), cabeceras de negocio personalizadas. Las cabeceras sobrantes no solo hacen que el código sea feo, sino que pueden causar comportamientos anómalos (por ejemplo establecer Accept-Encoding explícitamente pero el cliente no descomprime automáticamente).

¿Es compatible con el parámetro de proxy HTTPS (-x/--proxy)?

Actualmente el parámetro de proxy HTTP (-x/--proxy) aún no se convierte automáticamente. La configuración de proxy varía mucho entre lenguajes (JS fetch no tiene soporte de proxy nativo requiere Agent, Python usa parámetro proxies=, Go mediante Transport.Proxy, PHP usa CURLOPT_PROXY, C# usa WebProxy, Java usa OkHttpClient.Builder().proxy()). Las cabeceras de proxy (autenticación del proxy en sí) también requieren procesamiento separado. En la versión actual los parámetros relacionados con proxy se ignoran, puedes añadir manualmente la configuración de proxy sobre la base del código generado, versiones posteriores mejorarán el soporte de proxy.

¿Qué diferencias hay con herramientas online como curlconverter.com?

En comparación con herramientas conocidas como curlconverter.com, las ventajas de curl-to-code de GeekFormat:①Procesamiento totalmente local (la lógica de procesamiento de curlconverter está en el servidor o cliente), no sube datos más seguro;②Interfaz y explicaciones en chino, amigable para desarrolladores chinos;③El código generado se adapta mejor al uso de producción real (por ejemplo Python requests usa parámetro json= para body JSON en lugar de data=, comportamiento por defecto de Go alineado con curl, C# procesa Content-Type correctamente sin codificar rígidamente application/json);④Documentación completa, FAQ, tablas de comparación, resolución de problemas, no solo genera código sino que te ayuda a entender por qué se escribe así;⑤Gratis sin publicidad, no requiere registro ni inicio de sesión, no necesita ninguna petición de red para usar.

术语表

cURL / curl
Herramienta de línea de comandos de código abierto y biblioteca libcurl, para enviar peticiones de protocolos como HTTP/HTTPS/FTP por línea de comandos mediante URL, es la herramienta más utilizada por desarrolladores para depurar APIs.
Método HTTP
Acción de petición HTTP, comunes son GET (leer), POST (crear), PUT (actualización completa), PATCH (actualización parcial), DELETE (eliminar), HEAD (obtener cabeceras), OPTIONS (consultar capacidades del servidor).
Cabecera (Header)
Pares clave-valor de metadatos en la petición HTTP, como Content-Type, Authorization, User-Agent, Cookie, Accept, etc., especificados en curl mediante -H/--header.
Cuerpo (Body)
Parte de datos de la petición HTTP, común en POST/PUT/PATCH, especificada en curl mediante -d/--data/--data-binary/-F, formatos comunes son JSON, form-urlencoded, multipart/form-data.
Content-Type
Cabecera de petición/respuesta que indica el tipo de medio del body. application/json indica JSON, application/x-www-form-urlencoded indica formulario codificado en URL, multipart/form-data indica formulario de subida de archivos.
Autenticación Basic
Autenticación básica HTTP, transmite usuario y contraseña mediante la cabecera Authorization: Basic base64(user:pass), especificada en curl con -u user:pass.
Bearer Token
Método de autenticación basado en tokens, transmitido mediante la cabecera Authorization: Bearer <token>, común en JWT/OAuth2.
User-Agent
Cabecera de petición que identifica el tipo de cliente (navegador/rastreador/script), curl envía por defecto "curl/número de versión", muchos sitios web bloquean UAs no de navegador, comúnmente especificado con -A.
Cookie
Pares clave-valor enviados por el servidor mediante Set-Cookie y devueltos por el navegador en peticiones posteriores mediante la cabecera Cookie, para mantener sesiones. curl -b envía Cookie, -c guarda Cookie.
Referer
Cabecera de petición que indica la URL de la página de origen de la petición actual, algunas comprobaciones de anti-hotlink/CSRF la verifican. Establecida en curl con -e.
Redirección (3xx)
Cuando el servidor devuelve códigos de estado 301/302/303/307/308, indica al navegador que salte a una nueva URL. curl por defecto no sigue, añade -L/--location para seguir.
--compressed
Opción de curl, añade automáticamente la cabecera Accept-Encoding: deflate, gzip y descomprime automáticamente la respuesta. Sin establecer, la respuesta puede ser datos comprimidos ilegibles.
-k/--insecure
Opción de curl, omite la verificación de certificado HTTPS, solo para entornos de prueba con certificados autofirmados, prohibido en producción.
fetch API
API de peticiones HTTP JavaScript nativa del navegador, devuelve Promise, compatible con navegadores modernos.
Axios
Popular biblioteca cliente HTTP basada en Promise, compatible con navegador y Node.js, serialización JSON automática, interceptores, cancelación por tiempo de espera.
OkHttp
Biblioteca cliente HTTP Java/Android de Square, alto rendimiento, compatible con HTTP/2, pool de conexiones, GZIP transparente.
HttpClient (.NET)
Cliente HTTP recomendado para C#/.NET, espacio de nombres System.Net.Http, API estándar de .NET Core/.NET 5+.
Invoke-RestMethod
Cmdlet de petición HTTP integrado en PowerShell 3.0+, analiza automáticamente respuestas JSON/XML como objetos de PowerShell.

Tabla de comparación de opciones comunes de cURL con 11 lenguajes objetivo

Valores comunes de Content-Type y uso con curl

Comparación de tres formatos de Copy as cURL en Chrome DevTools

Troubleshooting