HTTPie é uma ferramenta de linha de comando que permite interagir com servidores HTTP de uma maneira amigável para humanos. Possui uma sintaxe simples e expressiva, suporta JSON e dados de formulário, lida com autenticação e cabeçalhos, e exibe a saída colorida e formatada. Também possui alguns recursos avançados, como sessões, plugins e proxies, que a tornam ainda mais poderosa e versátil.
Neste post de blog, eu vou mostrar como instalar e usar o HTTPie, e como ele pode ajudá-lo a testar e depurar suas APIs com facilidade e eficiência. Também compartilharei algumas dicas e truques que aprendi ao longo do caminho, e alguns recursos que você pode usar para aprender mais sobre HTTPie.
Como Instalar o HTTPie
O primeiro passo para usar o HTTPie é instalá-lo em seu sistema. O HTTPie é escrito em Python, e você pode instalá-lo utilizando o pip, o gerenciador de pacotes do Python. Para isso, abra seu terminal e execute o seguinte comando:
pip install --upgrade httpie
Isso instalará a versão mais recente do HTTPie em seu sistema, e também atualizará qualquer versão existente, se você tiver uma. Você pode verificar a versão do HTTPie executando:
http --version
Você deve ver algo como isto:
http 2.5.0
HTTPie - uma ferramenta CLI, semelhante ao cURL, para humanos.
https://httpie.io
Se você ver essa saída, parabéns! Você instalou o HTTPie com sucesso e está pronto para usá-lo.

Como Enviar Requisições HTTP com o HTTPie
A sintaxe básica do HTTPie é:
http [flags] [MÉTODO] URL [ITEM [ITEM]]
Onde:
flags
são argumentos opcionais que modificam o comportamento do HTTPie, como-v
para modo verbose,-h
para ajuda, ou-f
para seguir redirecionamentos.MÉTODO
é o método HTTP a ser usado, como GET, POST, PUT, PATCH, DELETE, etc. Se omitido, o HTTPie usa GET por padrão.URL
é o URL do servidor HTTP com o qual interagir, comohttps://example.com/api/users
.ITEM
é um par chave-valor opcional que especifica os dados da requisição, comoname=John
para dados de formulário, ouname:=John
para dados JSON. Você também pode usarITEM
para especificar cabeçalhos, comoUser-Agent:HTTPie
.
Por exemplo, para enviar uma requisição GET para https://example.com/api/users
, você pode simplesmente executar:
http https://example.com/api/users
Isso enviará uma requisição GET para o URL, e exibirá a resposta de maneira colorida e formatada. Você verá algo como isto:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 326
Content-Type: application/json; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"146-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
[
{
"id": 1,
"name": "John",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane",
"email": "jane@example.com"
},
{
"id": 3,
"name": "Bob",
"email": "bob@example.com"
}
]
Como você pode ver, o HTTPie exibe a linha de status da resposta, cabeçalhos e corpo de uma maneira clara e legível. Ele também usa cores para destacar diferentes partes da resposta, como verde para cabeçalhos, azul para chaves JSON e amarelo para valores JSON.

Você também pode enviar outros métodos HTTP com o HTTPie, como POST, PUT, PATCH ou DELETE, especificando o método antes da URL. Por exemplo, para enviar uma requisição POST para https://example.com/api/users
com alguns dados JSON, você pode executar:
http POST https://example.com/api/users name=John email=john@example.com
Isso enviará uma requisição POST para o URL, com os seguintes dados JSON no corpo da requisição:
{
"name": "John",
"email": "john@example.com"
}
Você também pode usar o operador :=
para especificar valores JSON, como name:="John"
ou age:=25
. Isso é útil quando você quer enviar valores não string, como números, booleanos, arrays ou objetos.
O HTTPie exibirá a resposta da mesma maneira que antes, mas com um código de status e corpo diferentes. Você verá algo como isto:
HTTP/1.1 201 Created
Connection: keep-alive
Content-Length: 110
Content-Type: application/json; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"6e-8a9e8c9f"
Location: /api/users/4
Server: nginx/1.19.6
X-Powered-By: Express
{
"id": 4,
"name": "John",
"email": "john@example.com"
}
Como você pode ver, o HTTPie exibe o código de status da resposta como 201 Created, indicando que um novo recurso foi criado no servidor. Ele também exibe o cabeçalho Location, que aponta para o URL do recurso recém-criado. O corpo da resposta contém a representação JSON do novo usuário.
Você pode usar a mesma sintaxe para enviar outros métodos HTTP, como PUT, PATCH ou DELETE, trocando o nome do método. Por exemplo, para atualizar o nome do usuário com id 4, você pode executar:
http PATCH https://example.com/api/users/4 name=Jack
Isso enviará uma requisição PATCH para o URL, com os seguintes dados JSON no corpo da requisição:
{
"name": "Jack"
}
O HTTPie exibirá a resposta da mesma maneira que antes, mas com um código de status e corpo diferentes. Você verá algo como isto:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 110
Content-Type: application/json; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"6e-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
{
"id": 4,
"name": "Jack",
"email": "john@example.com"
}
Como você pode ver, o HTTPie exibe o código de status da resposta como 200 OK, indicando que o recurso foi atualizado com sucesso. O corpo da resposta contém a representação JSON do usuário atualizado.
Você também pode usar o HTTPie para enviar dados de formulário, utilizando o operador =
em vez do operador :=
. Por exemplo, para enviar uma requisição POST para https://example.com/api/login
com alguns dados de formulário, você pode executar:
http POST https://example.com/api/login username=John password=secret
Isso enviará uma requisição POST para o URL, com os seguintes dados de formulário no corpo da requisição:
username=John&password=secret
O HTTPie exibirá a resposta da mesma maneira que antes, mas com um tipo de conteúdo e corpo diferentes. Você verá algo como isto:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 32
Content-Type: text/plain; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"20-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
Login bem-sucedido. Bem-vindo, John!
Como você pode ver, o HTTPie exibe o tipo de conteúdo da resposta como text/plain, indicando que o corpo da resposta é texto simples. O corpo da resposta contém uma mensagem simples confirmando o login.

Como Inspecionar o Corpo da Resposta e Cabeçalhos com o HTTPie
Uma das grandes características do HTTPie é que ele automaticamente analisa e formata o corpo da resposta e os cabeçalhos, dependendo do tipo de conteúdo. Por exemplo, se a resposta for JSON, o HTTPie a exibirá de maneira bonita e colorida, como vimos antes. Se a resposta for HTML, o HTTPie a exibirá como texto bruto, mas com realce de sintaxe. Se a resposta for uma imagem, o HTTPie a exibirá como dados binários, mas com uma dica do tipo e tamanho da imagem.
Você também pode usar algumas flags para modificar como o HTTPie exibe a resposta. Por exemplo, você pode usar a flag -b
ou --body
para mostrar apenas o corpo da resposta, sem os cabeçalhos. Você pode usar a flag -h
ou --headers
para mostrar apenas os cabeçalhos da resposta, sem o corpo. Você pode usar a flag -p
ou --print
para especificar quais partes da requisição e resposta imprimir, usando os seguintes caracteres:
H
: Cabeçalhos da requisiçãoB
: Corpo da requisiçãoh
: Cabeçalhos da respostab
: Corpo da resposta
Por exemplo, para mostrar apenas os cabeçalhos da requisição e o corpo da resposta, você pode executar:
http -p HB https://example.com/api/users
Isso exibirá algo como isto:
GET /api/users HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: example.com
User-Agent: HTTPie/2.5.0
[
{
"id": 1,
"name": "John",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane",
"email": "jane@example.com"
},
{
"id": 3,
"name": "Bob",
"email": "bob@example.com"
}
]
Como você pode ver, o HTTPie exibe os cabeçalhos da requisição e o corpo da resposta, mas não os cabeçalhos da resposta ou o corpo da requisição.
Você também pode usar a flag -j
ou --json
para forçar o HTTPie a tratar a resposta como JSON, mesmo que o tipo de conteúdo não seja application/json. Isso é útil quando o servidor não envia o tipo correto de conteúdo, ou quando você quer analisar uma resposta não-JSON como JSON. Por exemplo, para analisar uma resposta de texto simples como JSON, você pode executar:
http -j https://example.com/api/hello
Isso exibirá algo como isto:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 13
Content-Type: text/plain; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"d-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
{
"hello": "world"
}
Como você pode ver, o HTTPie analisa a resposta de texto simples como JSON e a exibe de maneira bonita e colorida.
Você também pode usar a flag -o
ou --output
para salvar o corpo da resposta em um arquivo, em vez de exibi-lo no terminal. Isso é útil quando você quer baixar um arquivo do servidor, como uma imagem, um PDF ou um arquivo ZIP. Por exemplo, para baixar uma imagem de https://example.com/api/image
, você pode executar:
http -o image.jpg https://example.com/api/image
Isso salvará a imagem em um arquivo chamado image.jpg
em seu diretório atual. Você também pode usar a flag -d
ou --download
para gerar automaticamente um nome de arquivo com base na URL e no tipo de conteúdo. Por exemplo, para baixar a mesma imagem, você pode executar:
http -d https://example.com/api/image
Isso salvará a imagem em um arquivo chamado image-20240208-054325.jpg
em seu diretório atual, usando a data e hora como sufixo.
Como você pode ver, o HTTPie oferece muitas opções para inspecionar o corpo da resposta e os cabeçalhos, e para salvar a resposta em um arquivo. Você pode usar essas opções para testar e depurar suas APIs, e para verificar o conteúdo e o formato da resposta.
Limitação do HTTPie
HTTPie é uma ferramenta poderosa e amigável para interagir com servidores HTTP e APIs. No entanto, também possui algumas limitações, como:
- Não suporta protocolos GraphQL, WebSocket ou gRPC, que estão se tornando mais populares para o desenvolvimento web moderno.
- Não possui uma interface gráfica (GUI) ou uma versão web, que pode ser preferida por alguns usuários que não se sentem confortáveis com o terminal.
- Não possui recursos integrados para design, documentação, simulação ou teste de APIs, que são essenciais para o desenvolvimento e colaboração de APIs.
Por que você deve usar o Apidog
Apidog é uma plataforma integrada para design de API, depuração, desenvolvimento, simulação e teste. Ela combina as funcionalidades do Postman, Swagger, Mock e JMeter em uma única ferramenta. Você pode querer usar o Apidog se estiver procurando por:
- Uma solução abrangente e colaborativa para todo o ciclo de vida da API, desde o design até o teste, simulação e documentação.
- Uma ferramenta que suporte múltiplos protocolos, como HTTP, GraphQL, WebSocket e gRPC.
- Uma ferramenta que tenha tanto um aplicativo para desktop quanto uma versão web, além de uma interface de linha de comando (CLI).
- Uma ferramenta que implemente o design de API em primeiro lugar, facilitando a sincronização sem esforço da API, especificações e modificações durante todo o ciclo de vida da API.
Passo 1. Abra o Apidog e clique em “Nova API” para criar uma nova API para testar.

Passo 2. Selecione o método HTTP a ser usado para a API e insira a URL do endpoint.

Passo 3. Digite as informações necessárias, como parâmetros, de acordo com a especificação da API e clique no botão “Enviar” para enviar a requisição da API e obter a resposta.

conclusão
HTTPie é uma ferramenta poderosa e amigável que permite que você se comunique com servidores HTTP e APIs a partir do seu terminal. Tem muitos recursos e opções que facilitam a personalização e formatação de suas requisições e respostas. Você pode usar o HTTPie para testar, depurar e explorar APIs, além de automatizar tarefas e fluxos de trabalho.
Se você deseja usar uma plataforma mais integrada para design de API, depuração, desenvolvimento, simulação e teste, você também pode experimentar o Apidog. O Apidog é uma ferramenta que conecta todo o ciclo de vida da API, desde o design até o teste, simulação e documentação.