Si te dedicas al desarrollo de aplicaciones, una de las operaciones habituales es interaccionar con otros servicios. Mejor expresado, interaccionar con el API de otros servicios. Actualmente, los servicios mas normales con los que te relacionas tienen una API, no solo para leer datos, sino también para añadir o modificar. Pero, no me estoy dirigiendo a únicamente a desarrolladores de alto nivel, ni mucho menos. Si tu, haces tus propios scripts, o aplicaciones, y en alguno de esos scripts necesitas relacionarte con servicios de nuevo esta es tu herramienta. Por ejemplo, si quieres conocer la temperatura de tu ciudad o el resultado de algún partido de fútbol, esto, lo puedes hacer o desde una API o incluso haciendo scraping en la página web que quieras. Para todo esto, existen diferentes herramientas, pero, últimamente estoy utilizando una, que me ha dejado, particularmente un buen sabor de boca, HTTPie, un cliente HTTP para la línea de comandos.

Seguro que en alguno de tus scripts has utilizado herramientas como wget o curl . O si no sueles hacer scripts en alguna ocasión te has encontrado con alguna de estas herramientas. Si este es el caso, indicarte que HTTPie es el sustituto perfecto para estas herramientas, porque te ofrece, entre otras cosas, un lenguaje natural con el que relacionarte vía HTTP desde el terminal.

También es posible que hayas utilizado herramientas como Postman o Insomnia, clientes REST. Pues debes entender HTTPie como la versión para el terminal.

HTTPie un cliente HTTP para la línea de comandos

El objetivo de los desarrolladores de esta aplicación es el de crear una herramienta para el terminal que te permite interaccionar con servicios web de la forma mas transparentes y sencilla para seres humanos.

De esta forma HTTPie te proporciona una herramienta sencilla http (si, tal y como suena), con el que realizar llamadas HTTP con un lenguaje sencillo, y sobre todo natural. Pero no solo esto, también es realmente interesante que el resultado que te devuelve tiene resaltado de sintaxis.

HTTPie está constituido por un único comando para el terminal http , ideado, diseñado y creado con el objetivo de hacer mas llevadera la interacción con servidores HTTP, APIs y servicios web.

Características de HTTPie

Además de que HTTPie tiene una sintaxis natural y el resultado te lo devuelve con resaltado de sintaxis, este cliente HTTP para la línea de comandos, tiene algunas otras características que lo hacen realmente interesante. Algunas de estas características son las siguientes,

Soporte nativo para formato json .

. Utiliza una sintaxis intuitiva.

Resaltado de sintaxis y coloreado de la salida.

Soporte JSON.

Carga de archivos y formularios.

Soporte de protocolo HTTPS, proxies y autenticación.

Encabezados personalizados.

Sesiones persistentes.

Descargas del tipo de wget .

. Soporta complementos.

Es multiplataforma, con soporte para Linux, MacOS y Windows.

Instalación

HTTPie se encuentra en los repositorios oficiales de Ubuntu, y de la mayoría de distribuciones, con lo que su instalación es realmente sencilla. Para el caso particular de Ubuntu simplemente abre un terminal Ctrl+Alt+T y ejecuta la siguiente instrucción,

sudo apt install httpie

Uso y funcionamiento

Lo primero, y como ya te he adelantado anteriormente, la herramienta a utilizar en el terminal es http . Así, puedes conseguir un bonito hola mundo, ejecutando la siguiente instrucción en un terminal,

http HTTPie.org

El uso de la herramienta tiene la siguiente sintaxis,

http [flags] [metodo] <url> [item [item]]

Ejemplos

Por ejemplo para conocer la IP desde la que te estás conectando, y me refiero a la IP del router, no la IP local de tu equipo, puedes ejecutar la siguiente instrucción,

http https://whatismyipaddress.com/ | grep IPv4 | grep -oP ">\K\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

He combinado http con grep para obtener directamente la IP. Si no conoces el funcionamiento de grep , te recomiendo una lectura del artículo sobre filtros como awk, grep, sed y cut del tutorial sobre el terminal.

Otro interesante ejemplo del uso de http es el que te muestro a continuación, en el que obtengo la temperatura actual en Las Rozas. Por supuesto, cambiando la página de Las Rozas, por la de tu pueblo, tendrás esa información de primera mano.

http https://en.eltiempo.es/las-rozas-de-madrid.html | grep popup_temp_orig | head -1 | grep -Po 'popup_temp_orig="\K\d*'

Métodos HTTP

Trabajar con métodos HTTP utilizando HTTPie es un proceso realmente sencillo. Para que te hagas una idea. Si quieres borrar un registro utilizando una llamada DELETE , tan solo tienes que ejecutar una instrucción similar a la que te encontrarás a continuación,

http DELETE ejemplo.org/registros/25

Parámetros

Otra de las operaciones mas habituales que sueles hacer al realizar una llamada HTTP es pasar parámetros. Esto en el caso de HTTPie también es sencillo. Simplemente, cuando ejecutes la instrucción tienes que añadir tus parámetros de la forma clave==valor . Por ejemplo,

http https://ejemplo.org clave==valor

Igualmente si quieres definir un valor concreto para una cabecera HTTP la debes establecer utilizando clave:valor .

Descargar y subir archivos con este cliente HTTP

Descargar o subir archivos es tan sencillo como redirigir entrada y salida, tal y como te indico en el capítulo sobre redirigir entrada y salida, también del tutorial sobre el terminal. Así,

Para subir un archivo http ejemplo.org < archivo

Mientras que para descargar el archivo http ejemplo.org/archivo > archivo .

Si lo que quieres es descargar un archivo como si lo estuvieras haciendo con wget , la solución es,

http --download ejemplo.org/archivo

json

Trabajar y gestionar json con con este cliente HTTP para la línea de comandos es realmente fácil, sencillo y cómodo, en el sentido de que es tratado por esta herramienta de forma totalmente natural y transparente.

Así, por ejemplo para actualizar un registro utilizando el método PUT , es tan sencillo como una instrucción similar a esta,

http PUT ejemplo.org nombre=jose email=jose@ejemplo.org

Si quieres embeber json en bruto en alguna consulta, puedes hacerlo utilizando := , como en el siguiente ejemplo,

http PUT ejemplo.org nombre=jose dimensiones:='["alto", "ancho"]'

Pero no solo esto, sino que además te permite embeber archivos json y de texto en los campos utilizando :=@ y =@ respectivamente. Así por ejemplo,

http PUT ejemplo.org \ nombre=jose \ descripcion=@acercade.txt \ # archivo de texto datos:=@datos.json \ # archivo json

Autenticación

Uno de los posibles problemas con los que te puedes encontrar al utilizar este cliente HTTP para la línea de comandos, son los métodos de autenticación, ya que actualmente únicamente soporta dos, que son Basic y Digest . Sin embargo, indicarte que es posible incrementar las posibilidades de autenticación utilizando complementos.

Sea como fuere, si quieres utilizar la autenticación Basic , simplemente tu consulta debe ser del tipo,

http -a usuario:contraseña ejemplo.org

Proxies, redirecciones y verificaciones

HTTPie por defecto no admite redirecciones, pero esto lo puedes soslayar utilizando la opción --follow . Y respecto al tema de los proxies, tan solo tienes que indicar cada uno de los quieras utilizar indicándolo mediante la correspondiente opción --proxy . Por supuesto, también puedes indicar los proxies mediante variables de entorno.

Otro de los problemas con los que yo me suelo encontrar son los certificados SSL, que o están caducados o tienen algún problema. Es posible evitar este problema, utilizando la opción --verify=no .

Opciones de salida

Por último, un aspecto que quería reseñar referente a HTTPie son las opciones de salida. Y es que esta herramienta te permite definir que es lo que quieres mostrar. Así,

--headers , -h solo mostrará las cabeceras

, solo mostrará las cabeceras --body , -b solo mostrará el cuerpo

, solo mostrará el cuerpo --verbose , -v mostrará todo

, mostrará todo --print , -p te permitirá seleccionar que es lo que quieres mostrar

Conclusiones

En este artículo he querido resaltar lo que me ha parecido mas reseñable de esta cliente HTTP para la línea de comandos. Lo cierto es que tiene una extensa documentación que deberías consultar para exprimir al máximo HTTPie .

Más información,

Imagen de portada de Gary Moreton-jones en Unsplash