HTTPie – Protocolo HTTP na linha de comando sem complicação

Interface gráfica é legal, complementos que ajudam a interagir com o protocolo HTTP por baixo dos panos direto do navegador são muito bons.
Mas eu prefiro a linha de comando, escrevo o que quero e espero obter o que quero também, simples e fácil, na hora, numa interface que nunca muda.

Até ontem usava o cURL quando queria interagir com HTTP na linha de comando,
mas quase sempre com uma colinha com as opções do lado; Depois de 3 dias sem usar não sabia mais as opções dele. 🙂

Aí achei este post que fala sobre o HTTPie, uma ferramenta para linha de comando escrita em Python que se propõe a deixar a interação com o HTTP o mais humano possível.
O programa não tem muitas opções, mas por meio de uns poucos “operadores” é possível fazer tudo o que se deseja.

Para instalar, tem-se algumas opções:

  • sudo apt-get install httpie #Debian, Ubuntu
  • sudo yum install httpie #Fedora
  • sudo pip install httpie #Qualquer sistema que tenha Python e PIP

Ainda tem a opção para quem quer ter tudo sob controle, basta clonar o repositório, instalar as dependências (Requests e Pygments) e rodar python setup.py install.

Assim que for instalada a ferramenta te dá de presente um executável de nome “http” (até o nome é intuitivo), que deve ser chamado assim:

http [opções] [método] <URL> [parâmetros da requisição]
  • Opções: Controla o que / como deve ser retornado, como o corpo deve ser serializado, seção / cookies, autenticação e SSL. As que mais uso são:
    • --json ou -j: Serializa o corpo da requisição em JSON ({"campo1":"valor1","campo2":"valor2"}), se não for especificado, esse é o formato padrão
    • --form ou -f: Serializa o corpo da requisição como uma query HTTP (campo1=valor1&campo2=valor2)
    • --print ou -p <str>: Combinação “HBhb” indicando o que deve ser retornado; H – cabeçalhos da requisição, B – Corpo da requisição, h – Cabeçalho da resposta, b – Corpo da resposta
    • --stream ou -S: Ao invés de pegar o conteúdo inteiro e só depois retornar, retorna conforme for recebendo (útil para APIs que retornam informações em tempo real, como a de stream do Twitter)
    • --output ou -o <arquivo>: Redireciona a saída para um arquivo.
    • --follow: Segue redirecionamentos
  • Método: O método HTTP a ser utilizado. O programa utiliza uma regra básica para detectar o método: Se não tiver nada no corpo da requisição então é GET, se tiver alguma coisa é POST. Mas pode ser especificado aqui qual o método a ser utilizado (GET, POST, PUT, DELETE, …).
  • URL: O endereço a ser acessado. Pode ser usado ‘:’ como atalho para “localhost”. (:3000=localhost:3000, :/abc=localhost/abc)
  • Parâmetros da requisição: Essa é a parte mais legal do programa; Através de simples operadores você diz o que é cabeçalho, o que vai na URL da página como query HTTP, o que vai no corpo e o que é arquivo. O formato é “chave[operador]valor”:
    • : (dois-pontos): Cabeçalho HTTP
    • = (igual): Corpo. Esse será serializado de acordo com –json ou –form
    • == (igual igual): Concatena na URL — query HTTP
    • := (dois-pontos igual): Um campo JSON que não é string (cores:=['preto', 'azul'])
    • @ (arroba): Arquivo a ser enviado via formulário
    • =@ (igual arroba): Como o operador ‘=’, mas aceita um nome de arquivo e coloca seu conteúdo no valor
    • :=@ (dois-pontos igual arroba): Como o operador ‘:=’, mas pega o conteúdo de um arquivo

Para terminar, alguns exemplinhos com o que foi mostrado acima.

#Gravando o corpo da página
http --download google.com
#ou
http --follow --print=b google.com
###Interações com API REST
#Loga no sistema, enviando as credenciais que estao no arquivo login.json
#O HTTPie coloca o conteúdo da entrada padrão (stdin) no corpo da requisição, a não ser que --ignore-stdin seja passado
#login.json tem o conteúdo:
#{"email":"meu@email.com","password":"123"}
cat login.json|http :/myapp/login
#Insere um album, estando logado via JWT (o token está gravado em 'token.txt')
http :/myapp/albuns "Authorization:bearer $(cat token.txt)" titulo=Album1 "artista=artista legal"
#Atualiza o album de ID 30
http PUT :/myapp/albuns/30 "Authorization:bearer $(cat token.txt)" titulo=Album1 "artista=artista maneiro"
#Deleta o album de id 30
http DELETE :/myapp/albuns/30 "Authorization:bearer $(cat token.txt)"

Bom, é isso.

Com esse post não quis mostrar o manual da ferramenta, e sim o uso que faço dela e como ela facilita nas interações com serviços REST, onde não
precisa ficar montando JSON na mão e decorando zilhões de opções para fazer coisas simples.

O cURL ainda é indispensável e dispensa comentários, mas uma ferramenta mais focada nos torna muito mais produtivos.

Até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *