Httpie es un cliente HTTP de consola con sintaxis legible por humanos y salida de colores, diseñado para probar APIs desde la línea de comandos. La herramienta usa una sintaxis intuitiva: http GET https://api.example.com/users sin necesidad de especificar banderas para los encabezados y el cuerpo de la solicitud. Según la Httpie CLI Documentation (2026), la utilidad admite JSON de forma predeterminada, sesiones, autenticación y complementos.
Puntos clave
Httpie (o HTTPie) es una utilidad de línea de comandos escrita en Python que simplifica el envío de solicitudes HTTP en comparación con cURL. La principal diferencia es una sintaxis cercana al lenguaje natural: los argumentos se separan con espacios, los encabezados se indican con dos puntos y los datos JSON con un signo igual sin escapar comillas.
La misma solicitud POST en cURL requiere al menos tres banderas (-X, -H, -d) y escape manual del JSON. Httpie hace lo mismo con tres palabras y sin banderas, estableciendo automáticamente Content-Type: application/json y resaltando la salida. La respuesta se formatea con sangrías y resaltado de sintaxis de forma predeterminada.
| Operación | cURL | Httpie |
|---|---|---|
| Solicitud GET | curl https://api.example.com | http GET https://api.example.com |
| POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.com | http POST https://api.example.com name=test |
| Encabezado | curl -H "Authorization: Bearer token123" https://api.example.com | http GET https://api.example.com Authorization:"Bearer token123" |
Httpie usa un único formato de línea de comandos sin banderas para los parámetros principales. El método HTTP se indica como primer argumento (GET, POST, PUT, DELETE, PATCH) y la URL como segundo. Si se omite el método, Httpie elige automáticamente GET (para solicitudes sin cuerpo) o POST (con cuerpo).
Authorization:"Bearer token".name=John age=30.active:=true tags:=["dev","test"].avatar@~/photo.jpg.Httpie determina automáticamente el tipo de dato: si se pasa key=value, el cuerpo se envía como JSON. Si se pasa texto sin procesar mediante --raw, se envía como texto plano. El formato form-data se activa con la bandera -f.
# Solicitud POST con datos JSON y un encabezado
http POST https://api.example.com/users \
name="John Doe" \
email="john@example.com" \
role:="admin" \
Authorization:"Bearer test123"
# Respuesta con resaltado y Pretty-print
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"name": "John Doe"
}
La serialización JSON en Httpie funciona automáticamente: un valor pasado como key=value se convierte en un campo de cadena del JSON. Para números y valores booleanos se usa key:=value. Los objetos anidados se crean mediante notación de puntos: address.city=Moscow.
Httpie admite el formato multipart/form-data para cargar archivos y datos mediante la sintaxis key@path. Si necesita enviar el contenido de un archivo como cuerpo sin procesar de la solicitud, se usa la redirección de entrada: http POST example.com < file.json. Para descargar la respuesta a un archivo, se usa la bandera -d (download).
# Envío de JSON desde un archivo
http POST https://api.example.com/users < user.json
# Carga de un archivo mediante multipart
http -f POST https://api.example.com/upload \
photo@~/photo.jpg \
description="Profile photo"
Las sesiones en Httpie conservan el estado entre solicitudes: cookies, encabezados y parámetros de autenticación. Una sesión se crea con la bandera --session=name. Los datos de la sesión se almacenan en un archivo JSON en la carpeta ~/.httpie/sessions/. Una sesión con el sufijo :readonly no se actualiza después de una solicitud.
Primero se realiza una solicitud POST a /auth/login con las credenciales; el servidor devuelve una cookie de sesión. Todas las solicitudes posteriores a endpoints protegidos dentro de la misma sesión envían automáticamente la cookie guardada, lo que simula el comportamiento del navegador al probar la API de una aplicación móvil.
# Paso 1: autenticación
http --session=app-test POST https://api.example.com/auth/login \
username="dev" password="secret"
# Paso 2: solicitud con la cookie de sesión guardada
http --session=app-test GET https://api.example.com/users/me
Httpie admite todos los tipos principales de autenticación mediante banderas: -a user:pass para Basic Auth, --auth-type=digest para Digest, --auth-type=bearer TOKEN para Bearer Token. Los encabezados personalizados se agregan como HeaderName:value en cualquier lugar del comando.
Para probar una API con OAuth 2.0, el token se transmite mediante el encabezado Authorization. Httpie no gestiona el ciclo de vida del token a nivel de núcleo: lo hace un script externo. El comando http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource equivale a especificar explícitamente el encabezado con el token.
Httpie es ideal para pipelines de CI/CD gracias a sus cero dependencias (excepto Python) y su salida legible. Los comandos se leen fácilmente en los registros sin análisis adicional. La herramienta se instala mediante pip y está disponible en todas las imágenes de Docker populares, incluidas Alpine, Ubuntu y las imágenes oficiales de CI de Jenkins y GitLab. Esto convierte a Httpie en una opción cómoda para pruebas automatizadas de APIs REST y microservicios.
Un escenario típico es comprobar el estado de la API después de desplegar una aplicación. Httpie envía una solicitud al endpoint de salud y finaliza con un código distinto de cero si la respuesta no coincide con la esperada. La bandera --check-status devuelve automáticamente un error para códigos de estado >= 300.
# Comprobación de salud en el script de despliegue
http --check-status GET https://api.staging.example.com/health
status:="ok" && \
echo "La API está sana" || \
echo "Falló la comprobación de la API"
Httpie admite complementos mediante el sistema Package Index. Los complementos añaden nuevos tipos de autenticación, formatos de serialización y transportes. La instalación se realiza mediante pip: pip install httpie-plugin-name. Después de la instalación, el complemento se activa automáticamente en el siguiente inicio de Httpie.
Httpie admite filtrado similar a jq mediante la opción --pretty=format y salida compatible con cURL mediante --print. La bandera --quiet desactiva la salida de colores para mejorar la legibilidad en los registros de CI. Para el procesamiento programático de la respuesta, use la bandera --body, que muestra solo el cuerpo de la respuesta sin encabezados.
# Extracción de un campo de una respuesta JSON con jq
http GET https://api.example.com/users/1 | jq '.name'
# Salida solo del cuerpo de la respuesta (sin encabezados)
http --body GET https://api.example.com/health
# Envío por lotes con diferentes datos desde un archivo
while read -r line; do
http POST https://api.example.com/items $line
done < items.txt
Httpie admite formatos de salida mediante la bandera --print: H (encabezados de solicitud), B (cuerpo de solicitud), h (encabezados de respuesta), b (cuerpo de respuesta). La combinación --print=hb muestra solo los encabezados y el cuerpo de la respuesta. La bandera --pretty=all activa el formato de colores con sangrías.
Httpie admite personalización mediante la variable HTTPIE_COLORS. Configure colores para URL, encabezados, JSON y códigos de estado. Hay temas integrados disponibles: autumn, borland, fruity, monokai, native, tango para diferentes terminales.
Para el procesamiento programático, use --body --pretty=none, que devuelve JSON sin procesar. La salida compacta es útil para pasar a jq, sed y otros analizadores al automatizar pruebas de API en scripts.
Httpie admite varios formatos de salida mediante la bandera --print: H (encabezados de solicitud), B (cuerpo de solicitud), h (encabezados de respuesta), b (cuerpo de respuesta). La combinación --print=hb muestra solo los encabezados y el cuerpo de la respuesta, excluyendo la meta-información de la conexión. La bandera --pretty=all activa el formato de colores con sangrías para mejorar la legibilidad.
Httpie admite la personalización de colores mediante la variable de entorno HTTPIE_COLORS. Puede configurar colores para URL, encabezados, claves JSON y códigos de estado de respuesta. Hay temas integrados disponibles: autumn, borland, fruity, monokai, native y tango para diferentes tipos de terminales y preferencias personales.
Para el procesamiento programático de la salida, use la combinación de banderas --body --pretty=none, que devuelve JSON sin procesar sin colores ni sangrías. La salida compacta es útil para pasar a jq, sed y otros analizadores de consola al automatizar pruebas de API REST en scripts de shell.
Preguntas frecuentes
Httpie ofrece una sintaxis más legible sin banderas para operaciones básicas, serialización JSON automática, resaltado de colores de la respuesta y soporte integrado de sesiones. cURL sigue siendo imprescindible para operaciones de bajo nivel: trabajo con FTP, SMTP y protocolos no estándar.
Use la bandera -f (o --form): http -f POST example.com name=John file@~/photo.jpg. Httpie establecerá automáticamente Content-Type: multipart/form-data. Sin la bandera -f, los datos se envían como application/json.
Sí, Httpie admite HTTPS. Para certificados autofirmados, use la bandera --verify=no. Para especificar un archivo CA personalizado: --verify=/path/to/cert.pem. La verificación de certificados está activada de forma predeterminada.
No, Httpie no admite WebSocket y está pensado exclusivamente para el protocolo HTTP/HTTPS. Para WebSocket, use websocat o wscat. Httpie se centra en REST, GraphQL y operaciones con archivos.
Use la bandera -d (download): http -d GET https://example.com/file.zip. Httpie guardará el archivo con el nombre original del encabezado Content-Disposition o de la URL. Para un nombre personalizado, especifique -o output.zip.
Resumen
http [method] URL [key=value] [Header:value] no requiere banderas para la mayoría de las solicitudes.Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también