Crear un comando curl desde una petición HTTP
Convierta una petición HTTP estructurada en un comando curl listo para pegar en un shell compatible con POSIX.
Ejecutar — gratis
Indique el método, una URL absoluta, las cabeceras y, si corresponde, un cuerpo de texto. El generador protege cada valor dinámico, incluidos espacios, consultas, signos y apóstrofos, para que el shell no interprete los datos como sintaxis. Resulta útil para depurar API, reproducir peticiones registradas, redactar documentación y entregar a otra persona una petición exacta sin montar las opciones a mano.
Describa la petición que desea reproducir
Empiece por el método HTTP y la URL completa. La URL debe ser absoluta: ha de incluir un esquema como HTTPS y la información necesaria para que curl encuentre el destino sin depender del contexto del navegador ni de una dirección base. Añada las cabeceras como filas ordenadas de nombre y valor cuando necesite autorización, negociación de contenido, trazabilidad, comportamiento condicional o un tipo de contenido declarado. Incluya el cuerpo solo si la petición lo lleva; una cadena vacía representa un cuerpo vacío intencionado, mientras que omitirlo no añade ninguna opción de datos. El comando usa una opción explícita para el método, la URL protegida, una opción por cabecera y datos sin interpretar cuando existe cuerpo. Conserva el orden de las cabeceras para facilitar comparaciones. El generador no envía nada, no resuelve el host, no examina credenciales ni modifica la carga.
Entienda cómo las comillas protegen cada valor
El shell interpreta una línea de órdenes antes de que curl la reciba. Por ello, copiar valores sin proteger puede alterar su significado: un ampersand puede iniciar otro proceso, un signo de dólar activar una expansión, los espacios dividir un argumento y las comillas de JSON convertirse en sintaxis. Este generador encierra cada argumento dinámico entre comillas simples de POSIX. Si el propio valor contiene un apóstrofo, cierra el tramo, inserta el carácter literal mediante un fragmento entre comillas dobles y vuelve a abrirlo. La secuencia parece extraña, pero conserva los bytes exactos en sh, bash, dash y zsh. Cada cabecera se emite como un solo argumento con nombre, dos puntos, espacio y valor. El cuerpo usa la opción de datos sin interpretar para que una arroba inicial no se lea como nombre de archivo. El resultado está pensado para shells POSIX; PowerShell y el Símbolo del sistema de Windows aplican reglas distintas.
Revise el resultado antes de compartirlo o ejecutarlo
El generador rechaza una URL ausente o relativa porque un fragmento como /users/42 resulta ambiguo fuera de la aplicación que aporta la dirección base. También valida que el método sea un token HTTP, comprueba la sintaxis de los nombres de cabecera, exige valores de texto y rechaza saltos de línea. Estas comprobaciones evitan que unas comillas correctas oculten una estructura mal formada, pero no determinan si el servidor admite el método, si la URL corresponde al entorno previsto o si es seguro revelar una credencial. Revise el comando, sobre todo si contiene autorización, cookies de sesión, datos personales o un host de producción. Use credenciales de prueba de corta duración y elimine secretos antes de enviarlo por chat o incluirlo en una incidencia. Como el proceso es determinista, la misma entrada siempre produce el mismo texto, apropiado para instantáneas, documentación, informes reproducibles y revisiones donde deben verse los cambios pequeños.
Qué puede hacer con ella
Reproducir un fallo de API
Convierta método, URL, cabeceras y cuerpo capturado en un comando pegable para depuración local.
Redactar documentación precisa
Genere ejemplos curl coherentes sin escapar manualmente JSON, parámetros de consulta ni cabeceras.
Compartir una petición con su equipo
Entregue un comando determinista que conserve la estructura y permita revisar los cambios.
Preguntas frecuentes
¿Cuánto cuesta?
La herramienta del navegador es gratuita. La ejecución mediante API cuesta $0.002 por petición.
¿Esta herramienta envía la petición HTTP?
No. Solo genera texto de línea de órdenes y no accede a la red.
¿Por qué la URL debe ser absoluta?
Una URL relativa depende de una dirección base no indicada y no representa por sí sola una petición curl completa.
¿Cómo se tratan los apóstrofos?
Cada apóstrofo cierra el tramo entre comillas simples, se inserta como literal y vuelve a abrir dicho tramo.
¿Puedo usar el resultado en PowerShell?
La salida está diseñada para shells compatibles con POSIX; PowerShell utiliza otras reglas de análisis y comillas.
¿Se eliminan los secretos de las cabeceras?
No. Los valores se conservan exactamente; elimine las credenciales antes de compartir el comando.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev2/curl-command-build \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"method":"POST","url":"https://api.example.com/v1/widgets?draft=true"}'const res = await fetch("https://api.kit.forhosting.com/dev2/curl-command-build", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"method": "POST",
"url": "https://api.example.com/v1/widgets?draft=true"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/curl-command-build",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"method": "POST",
"url": "https://api.example.com/v1/widgets?draft=true"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/curl-command-build", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"method":"POST","url":"https://api.example.com/v1/widgets?draft=true"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"method":"POST","url":"https://api.example.com/v1/widgets?draft=true"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/curl-command-build", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"method": "POST",
"url": "https://api.example.com/v1/widgets?draft=true"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.curl_command_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |