Advertisement
  1. Code
  2. Cloud & Hosting
  3. Web Servers

HTTPie, Ferramenta Amigável Parecida com cURL

Scroll to top
Read Time: 6 min

() 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.

Da documentação oficial:

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 comando http 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:

HTTP ResponseHTTP ResponseHTTP Response

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&amp;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á.

A demo of the autocompleteA demo of the autocompleteA demo of the autocomplete

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.

The response of a GET commandThe response of a GET commandThe response of a GET command

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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.