Generador y conversor de comandos curl

Crea comandos curl y conviértelos a fetch, Python y HTTPie.

Acerca de esta herramienta

Rellena el método, la URL, las cabeceras, el cuerpo y la autenticación para obtener un comando curl listo para ejecutar, o pega un comando curl existente para editarlo. Cada solicitud se muestra también como JavaScript fetch, Python requests y HTTPie. No se envía nada: la herramienta solo escribe los comandos.

Cómo se usa

  1. Pega un comando curl existente para importarlo, por ejemplo desde las herramientas para desarrolladores de tu navegador (Copiar como cURL).
  2. O define el método y la URL, y luego añade cabeceras, autenticación y un cuerpo JSON, de formulario o sin formato.
  3. Elige opciones como seguir redirecciones o mostrar las cabeceras de respuesta.
  4. Copia el resultado como curl, JavaScript fetch, Python requests o HTTPie.

Preguntas

¿Cómo envío JSON con curl?
Usa -H 'Content-Type: application/json' junto con --data-raw '{"key":"value"}'. Las versiones más recientes de curl también tienen --json, que define por ti las cabeceras Content-Type y Accept. Elige JSON como tipo de cuerpo aquí y se añaden las opciones correctas.
¿Esta herramienta envía mi solicitud?
No. Solo escribe código. Nada sale de tu navegador, así que puedes pegar comandos que contengan tokens, aunque es buena práctica sustituir los secretos reales por marcadores antes de compartir un comando.
¿Qué diferencia hay entre -d y --data-raw?
Con -d, un valor que empieza por @ se lee de un archivo. --data-raw envía el texto exactamente como está escrito, lo que es más seguro para JSON y para valores que pueden empezar por @.
¿Por qué curl no sigue las redirecciones?
De forma predeterminada, curl muestra la propia respuesta de redirección. Añade -L (Seguir redirecciones) para ir a la nueva ubicación. fetch y la mayoría de las bibliotecas siguen las redirecciones automáticamente.
¿Qué opciones de curl se pueden importar?
Método, URL, cabeceras, las opciones de datos, --json, -u, user agent, cookies, referer, -G, -L, -i, -s, -k, -v, --head y --compressed. Los campos multipart -F y otras opciones poco comunes se omiten con un aviso.
¿Cómo envío datos de formulario con curl?
curl -d "name=Ada&role=admin" URL envía un formulario codificado como URL y cambia el método a POST por sí solo. Usa --data-urlencode "q=hello world" cuando un valor contenga espacios o símbolos. Las subidas de archivos necesitan multipart -F "file=@photo.jpg", que esta herramienta omite al importar, así que añádelo a mano.
¿Cómo añado parámetros de consulta a una solicitud GET con curl?
Ponlos en la URL y rodea la URL completa con comillas dobles, porque & y ? significan algo para la shell. O mantenlos separados con -G --data-urlencode "q=red shoes", que añade los valores codificados a la URL en lugar de enviar un cuerpo. La importación de aquí entiende -G y pasa los valores a la URL.
¿Cómo veo las cabeceras de respuesta con curl?
-i muestra la línea de estado y las cabeceras antes del cuerpo. -I (--head) envía una solicitud HEAD y muestra solo las cabeceras, aunque algunos servidores responden a HEAD de forma distinta que a GET. -v muestra también las cabeceras de la solicitud, además del handshake TLS, lo que ayuda al depurar redirecciones, autenticación o errores de certificado.

Cómo convertir curl a Python requests

Pega el comando curl en el cuadro de importación y elige Python. Las cabeceras se convierten en un dict, un cuerpo JSON pasa a ser json=payload para que requests lo serialice y establezca el Content-Type, y los cuerpos de formulario o en bruto pasan a ser data=payload. La autenticación Basic de -u se convierte en auth=(user, password), y -k en verify=False. Un token Bearer se queda en las cabeceras como una entrada Authorization.

Hay dos líneas que pueden sorprenderte. requests sigue las redirecciones por defecto y curl no, así que el código añade allow_redirects=False salvo que el comando curl tuviera -L. requests tampoco tiene un tiempo de espera por defecto y puede quedarse esperando para siempre a un servidor bloqueado, así que se añade timeout=30. Mantenlo o cambia el número. La misma solicitud también está disponible como JavaScript fetch y HTTPie con un clic.

¿Por qué una solicitud funciona en curl pero no en fetch?

La causa habitual es CORS. curl envía la solicitud y muestra lo que vuelva, pero un navegador solo deja que tu página lea una respuesta de otro origen cuando el servidor lo permite con Access-Control-Allow-Origin. Los navegadores también se niegan a establecer desde el código algunas cabeceras, como Cookie y Host. El mismo código fetch ejecutado en Node no tiene comprobaciones CORS, así que se comporta como curl.

Para tener un punto de partida que funcione, abre la pestaña Red de las herramientas para desarrolladores de tu navegador, haz clic derecho en la solicitud y elige Copiar como cURL. En Windows, elige la variante bash, porque la variante cmd usa otro estilo de escape. El comando copiado lleva muchas cabeceras del navegador que rara vez necesitas, como sec-ch-ua y cookies largas, así que bórralas de la lista de cabeceras antes de convertir.

HTTPie vs curl: comparación de sintaxis

curl viene instalado casi en todas partes, incluidos macOS y Windows 10 y versiones posteriores. HTTPie (el comando http) tiene una sintaxis más corta y colorea la salida. Las cabeceras se escriben como Name:value sin -H, los campos de formulario como name=value con --form, --follow sustituye a -L y --verify=no sustituye a -k. El comando HTTPie generado pasa los cuerpos JSON mediante un here-string, que funciona en bash y zsh pero no en PowerShell.

Para la autenticación Basic, curl -u user:password y HTTPie -a user:password construyen la cabecera Authorization por ti. Las credenciales solo se codifican en Base64, no se cifran, como puede mostrarte la herramienta Base64, así que envíalas siempre por HTTPS. Para tokens, curl usa -H "Authorization: Bearer TOKEN" y HTTPie usa -A bearer -a TOKEN. Cuando importas un comando curl, una cabecera Bearer pasa automáticamente a los campos de Autenticación.

¿Algo no funciona o un resultado parece incorrecto? Informar de un problema con esta herramienta