Del comando de prueba a una integración
Al depurar una API, curl permite guardar una petición reproducible. Para llevarla a un proceso de Python, una página con Fetch o un servicio PHP, hay que expresar esos mismos datos con otra biblioteca. Este convertidor genera ese punto de partida y señala las diferencias que conviene revisar.
Cómo convertir curl a código
Introduce un solo comando con una URL HTTP o HTTPS completa. Selecciona Python, JavaScript o PHP, comprueba método, cabeceras y cuerpo, y copia o descarga el resultado. La conversión se hace en el navegador y no envía peticiones.
Conserva las comillas del comando y usa sintaxis POSIX. Si lo copias de las herramientas de desarrollo, elige la variante bash. Sustituye antes las variables y las sustituciones del shell; la herramienta no las evalúa ni lee archivos locales.
Elegir Python Requests, Fetch o PHP cURL
Python usa Requests y necesita pip install requests. El cuerpo se envía como bytes UTF-8, conservando el texto original. PHP requiere la extensión cURL. Fetch sirve para JavaScript en el navegador o en una versión compatible de Node.js, con restricciones distintas según el entorno.
No se admiten automáticamente subidas de archivos, formularios multipart, proxys ni opciones avanzadas sin correspondencia. Una opción no compatible detiene la salida. Añade a tu aplicación los tiempos de espera y el tratamiento de errores que necesite.
Por qué una petición puede fallar al pasarla a Fetch
El navegador aplica CORS y controla determinadas cabeceras. La herramienta omite esas cabeceras en Fetch y muestra cuáles son. También usa credentials: omit, por lo que no incorpora automáticamente las cookies de una sesión abierta.
Sin -L, Fetch trata las redirecciones de forma manual; en el navegador esto puede dar una respuesta opaca. Si activas las redirecciones, comprueba los cambios de método y el envío de credenciales en cada salto. La conversión no verifica la autenticación ni la configuración del servidor.
Conservar dos valores con el mismo nombre
En este formulario aparecen dos campos tag. --data-urlencode codifica el espacio y conserva ambos valores en el cuerpo. El código Python no los convierte en un diccionario que sobrescriba una de las entradas.
curl 'https://example.com/api/tags' --data-urlencode 'tag=cloud hosting' --data-urlencode 'tag=linux'import requests
url = "https://example.com/api/tags"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
body = "tag=cloud%20hosting&tag=linux".encode("utf-8")
response = requests.request(
method="POST",
url=url,
headers=headers,
data=body,
allow_redirects=False,
verify=True,
)
print(response.status_code)
print(response.text)
Opciones de curl y su resultado
| Entrada curl | Tratamiento |
|---|---|
URL / --url | Una URL HTTP o HTTPS completa |
-X / --request | Método HTTP explícito |
-H / --header | Nombre y valor; revisar duplicados y directivas vacías |
-d / --data / --data-raw / --data-binary | Cuerpo en línea; conserva el orden de los argumentos |
--data-urlencode / -G | Codifica valores; -G los lleva a la consulta de la URL |
--json | Conserva texto JSON y añade cabeceras JSON predeterminadas |
-u / --user | Basic Auth con username:password |
-L / -I / -k | Redirecciones, HEAD y validación TLS; Fetch no admite -k |
-b / -A / -e | Cookie, User-Agent y Referer sujetos a reglas del navegador |
--compressed / -s / -S / -v / -i | Descompresión de la biblioteca; sin reproducir la presentación del terminal |
Dudas al convertir curl
¿Pegar un comando envía la petición?
No. Solo se analiza el texto y se genera código en el navegador. La petición se envía cuando ejecutas el resultado por tu cuenta.
¿Se puede pegar «Copy as cURL» del navegador?
Sí, si es una petición única en formato POSIX con opciones admitidas. Usa la exportación bash. Si se señala una opción incompatible, revisa su función antes de retirarla.
¿Cambian los números grandes de un JSON?
El cuerpo se conserva como texto, sin volver a serializarlo. Esta conversión no modifica números, espacios ni claves repetidas. --json tampoco valida la sintaxis JSON.
¿Por qué hay menos cabeceras en JavaScript?
Fetch no permite controlar libremente las cabeceras reservadas al navegador. Las omitidas se enumeran en las notas. Content-Length lo recalcula la biblioteca HTTP.
¿Qué debo revisar antes de guardar el archivo?
Las credenciales y los tokens introducidos permanecen en el código. Revísalos antes de compartirlo. Configura también los tiempos de espera y considera que Requests puede usar proxys y .netrc del entorno.
