HTTPie, Ferramenta Amigável Parecida com cURL
() translation by (you can also view the original English article)
cURL é uma ferramenta de linha de comando comum para requisições HTTP. Nesse tutorial, veremos HTTPie, uma ferramenta de linha de comando para requisições HTTP amigável. HTTPie usa comando com sintaxe simples e natural, e mostra retornos de forma apresentável.
HTTPien (pronuncia-se ei-ti-ti-pai) é um cliente HTTP de linha de comando. Seu objetivo é tornar interação CLI de serviços web o mais amigável possível. Ela prové um comandohttp
simples que permite enviar requisições HTTP arbitrárias usando uma sintaxe simples e natural e com retorno colorido. HTTPie pode ser usada para testes, depuração e interações gerais com servidores HTTP.
Começando
Para começar com HTTPie em no Ubuntu, precisamos instalar o pacote usando apt-get.
1 |
sudo apt-get install httpie |
Após instalada, teremos HTTPie no sistema. Tentemos uma requisição GET a qualquer site usando HTTPie:
1 |
http www.tutsplus.com |
A consulta acima retorna a seguinte resposta:



Parece que HTTPie está instalada e funcionando no sistema. Se atentarmos, o retorno colorido mostra que a URL foi movida permanentemente para https://tutsplus.com. Por isso, para um GET para Tutsplus, modifiquemos a consulta:
1 |
http https://tutsplus.com |
A consulta acima retornará o HTML da requisição GET à url https://tutsplus.com.
Como visto na consulta acima, a única informação que HTTPie
precisa para realiza a requisição é a URL.
Realizando Requisições Básicas Com HTTPie
Antes de continuar com os comandos do HTTPie, veremos como realizar requisições básicas com ele. Usaremos o json-server para termos um servidor simulado funcional para realizar as requisições. Para começar, instalemos json-server usando npm.
1 |
npm install -g json-server |
Criemos um arquivo index.js
que criaremos dados aleatórios para nosso servidor simulado.
1 |
// index.js
|
2 |
module.exports = function() { |
3 |
var data = { users: [] } |
4 |
// Create 5 users
|
5 |
for (var i = 0; i < 5; i++) { |
6 |
data.users.push({ id: i, name: 'user' + i }) |
7 |
}
|
8 |
return data |
9 |
}
|
Executemos json-server usando index.js
.
1 |
json-server index.js |
Agora, ele deve estar funcionando em http://localhost:3000/.
Requisições GET Usando HTTPie
Por padrão se uma URL é dada ao HTTPie, ele assume que a requisição será GET e a realiza. Eis um exemplo de requisição GET
:
1 |
http http://localhost:3000/users |
A requisição acima retorna o seguinte:
1 |
HTTP/1.1 200 OK |
2 |
Access-Control-Allow-Credentials: true
|
3 |
Cache-Control: no-cache |
4 |
Connection: keep-alive |
5 |
Content-Length: 212 |
6 |
Content-Type: application/json; charset=utf-8 |
7 |
Date: Tue, 18 Oct 2016 03:40:15 GMT |
8 |
ETag: W/"d4-4+4+bS4GA0+D/tDXlF8voQ"
|
9 |
Expires: -1
|
10 |
Pragma: no-cache |
11 |
Vary: Origin, Accept-Encoding |
12 |
X-Content-Type-Options: nosniff |
13 |
X-Powered-By: Express |
14 |
|
15 |
[
|
16 |
{
|
17 |
"id": 0,
|
18 |
"name": "user0" |
19 |
},
|
20 |
{
|
21 |
"id": 1,
|
22 |
"name": "user1" |
23 |
},
|
24 |
{
|
25 |
"id": 2,
|
26 |
"name": "user2" |
27 |
},
|
28 |
{
|
29 |
"id": 3,
|
30 |
"name": "user3" |
31 |
},
|
32 |
{
|
33 |
"id": 4,
|
34 |
"name": "user4" |
35 |
}
|
36 |
]
|
Requisição POST usando HTTPie
Para uma requisição POST com HTTPie, precisamos adicionar a palavra POST junto dos dados a serem enviados à URL. Eis um exemplo:
1 |
http POST http://localhost:3000/users id=007 name=RoyAgasthyan |
O comando mostrará algo semelhante ao seguinte na tela:
1 |
HTTP/1.1 201 Created |
2 |
Access-Control-Allow-Credentials: true
|
3 |
Cache-Control: no-cache |
4 |
Connection: keep-alive |
5 |
Content-Length: 43 |
6 |
Content-Type: application/json; charset=utf-8 |
7 |
Date: Tue, 18 Oct 2016 03:46:22 GMT |
8 |
ETag: W/"2b-mpj//lkYJiGiWBB42OLoKA"
|
9 |
Expires: -1
|
10 |
Pragma: no-cache |
11 |
Vary: Origin, X-HTTP-Method-Override, Accept-Encoding |
12 |
X-Content-Type-Options: nosniff |
13 |
X-Powered-By: Express |
14 |
|
15 |
{
|
16 |
"id": "007", |
17 |
"name": "RoyAgasthyan" |
18 |
}
|
Tentemos uma requisição GET com HTTPie e devemos ver o novo dado adicionado na resposta.
Enviando Formulários Usando HTTPie
Enviar formulários é outra requisição comum realizada por usuários. Com HTTPie, isso é bem fácil, especificando a opção form
, mostrada abaixo:
1 |
http --form POST www.yourformposturl.com name='Roy' |
Quando o comando acima é executado, o Content-Type
é application/x-www-form-urlenconded; charset=utf-8
é configurado automaticamente, assim, não precisamos fazê-lo manualmente.
Lidando Com Redirecionamentos HTTP
Como percebemos num exemplo inicial, por padrão, HTTPie não lida com redirecionamentos HTTP. Ao tentar um GET a www.tutsplus.com, ele nos mostrou uma mensagem dizendo que a URL foi movida. Se quisermos que HTTPie lide com redirecionamentos, precisamos da opção follow
no comando da requisição.
1 |
http --follow www.tutsplus.com
|
A consulta acima lidará com qualquer redirecionamento existente.
Baixando Arquivos Usando HTTPie
HTTPie provê a possibilidade de baixar arquivos de um servidor, parecido ao comando wget. Para tanto, precisamos passar a opção download
junto da URL.
1 |
http --download http://www.tutorialspoint.com/python/python_tutorial.pdf
|
O comando acima mostrará a resposta como visto abaixo:
1 |
HTTP/1.1 200 OK |
2 |
Accept-Ranges: bytes |
3 |
Access-Control-Allow-Headers: X-Requested-With |
4 |
Access-Control-Allow-Origin: *
|
5 |
Content-Length: 3945951 |
6 |
Content-Type: application/pdf |
7 |
Date: Tue, 18 Oct 2016 04:01:43 GMT |
8 |
Etag: "3c35df-52fe21b892a6f"
|
9 |
Last-Modified: Thu, 07 Apr 2016 09:57:34 GMT |
10 |
Server: ECS (pnq/AF9A) |
11 |
X-Cache: HIT |
12 |
|
13 |
Downloading 3.76 MB to "python_tutorial.pdf-1"
|
14 |
| 28.03 % 1.05 MB 63.85 kB/s 0:00:43 ETA |
Lidando com Autenticação
Acessar uma URL de um serviço web requer algum tipo de autenticação. HTTPie suporta os mecanismos mais comuns de autenticação. Por padrão, HTTPie suporta autenticação básica, então precisamos apenas passar o usuário e senha à requisição com a opção -a
.
1 |
http -a username:password www.mywebservice.com
|
Para usar o método de sumário de autenticação, precisamos passar o mecanismo de autenticação com a opção -A
.
1 |
http -A digest -a username:password www.myservice.com |
Customizando a Visualização da Resposta
Ao realizamos uma requisição à URL, todos os dados das informações do cabeçalho são mostrados no terminal. HTTPie provê uma opção para customizá-los. Podemos imprimir cabeçalhos e dados do corpo da reposta, especificando as opções --header
e --body
, junto da requisição.
1 |
http https://www.tutsplus.com --header
|
O comando acima imprimirá as informações do cabeçalho como mostrado:
1 |
HTTP/1.1 301 Moved Permanently |
2 |
CF-RAY: 2f6669f88fc43548-LHR |
3 |
Connection: keep-alive |
4 |
Date: Sun, 23 Oct 2016 16:02:32 GMT |
5 |
Location: https://tutsplus.com/ |
6 |
Server: cloudflare-nginx |
7 |
Set-Cookie: __cfduid=dfea480f2567e7c463e66999adfdc73d71477238552; expires=Mon, 23-Oct-17 16:02:32 GMT; path=/; domain=.tutsplus.com; HttpOnly |
8 |
Transfer-Encoding: chunked |
Agora, se tentarmos a requisição com a opção --body
, deverá imprimir a parte do corpo.
1 |
http www.google.com --body
|
O comando acima imprimirá o retorno abaixo:
1 |
<HTML>
|
2 |
|
3 |
<HEAD>
|
4 |
<meta http-equiv="content-type" content="text/html;charset=utf-8"> |
5 |
<TITLE>302 Moved</TITLE> |
6 |
</HEAD>
|
7 |
|
8 |
<BODY>
|
9 |
<H1>302 Moved</H1> |
10 |
The document has moved |
11 |
<A HREF="http://www.google.co.in/?gfe_rd=cr&ei=OBwQWPO7Juyq8wf13bzYBw">here</A>. |
12 |
</BODY>
|
13 |
|
14 |
</HTML>
|
Mantendo Sessões
Ao usar HTTPie, cada requisição é independente das outras. Podemos manter sessões caso queiramos persistí-las para outras requisições. Para tanto, tudo que precisamos é criar uma sessão nomeada, assim:
1 |
http --session=roy -a roy:mypass www.myservice.com |
O comando acima criará uma sessão chamada roy
que pode ser usada para outras requisições usando o mesmo nome. Eis um exemplo do uso da sessão nomeada roy
:
1 |
http --session=roy www.myservice.com |
Auto Completar Usando o Prompt HTTP
Pode ser difícil lembrar todos os comandos do HTTPie. O kit de ferramentas http-prompt
provê o recurso de auto-completar que pode ser usado com HTTPie. Para usar o http-prompt
, instalemo-no com pip
:
1 |
sudo pip install http-prompt |
Para começar uma sessão, invoquemos http-prompt
com a URL do servidor que consultaremos. Reiniciemos json-server
e invoquemos http-prompt
, assim:
1 |
http-prompt http://localhost:3000/users |
Digitemos algumas letras de HTTP e o auto-completar aparecerá.



Digitemos httpie
e deverá mostrar a URL que consultamos.
1 |
http http://localhost:3000/users |
Todos os comandos de requisição do HTTPie deve funcionar com o http-prompt
. Digitemos GET e ele deve aparecer no auto-completar. Ao digitar o comando GET, a resposta abaixo será mostrada.



Resumindo
Nesse tutorial, vimos como usar o HTTPie
, uma alternativa mais amigável ao cURL. Vimos como realizar requisições básica como GET e POST usando-o, além de outros recursos. Para mais informações sobre HTTPie
, vejamos a documentação oficial. Também vejamos a documentação oficial do http-prompt
. Diga-nos o que achou nos comentários abaixo.