Covil Do Dev

Biblioteca Requests em Python: Guia Completo

Neste artigo, você aprenderá como instalar a biblioteca Requests e como usá-la para fazer solicitações HTTP consumir dados de APIs em Python.

A biblioteca Requests é uma biblioteca Python simples e elegante, construída para tornar as requisições HTTP fáceis e amigáveis para humanos.

A biblioteca abstrai a complexidade de fazer requisições HTTP e permite que você interaja com serviços da Web de uma maneira mais simples e consistente do que usando a biblioteca urllib(biblioteca padrão do Python para trabalhar com requisições HTTP).

Neste artigo, você aprenderá como instalar a biblioteca Requests e como usá-la para fazer solicitações HTTP em Python.

Temas que serão abordados neste artigo:

  • Como instalar a biblioteca Requests;
  • Como fazer uma requisição HTTP com a biblioteca Requests(GET e POST);
  • Como passar parâmetros em uma requisição HTTP(headers, params, data, json);
  • Como fazer uma requisição HTTP com autenticação básica;
  • Como interpretar a resposta de uma requisição;
  • Como utilizar proxies em uma requisição;
  • Outros recursos da biblioteca Requests.

Como instalar a biblioteca Requests

Para instalar a biblioteca Requests, basta executar o seguinte comando no terminal:

pip install requests

Como fazer uma requisição HTTP com a biblioteca Requests

A biblioteca Requests fornece uma interface simples e elegante para fazer requisições HTTP em Python, todos os tipos de requisições HTTP são suportados(GET, POST, PUT, DELETE) e seguem um padrão semelhante.

Requisição GET

A requisição GET é usada para recuperar dados de um servidor Web.

Para fazer uma requisição GET com a biblioteca Requests, basta chamar a função get() e passar a URL como argumento.

import requests

response = requests.get('https://httpbin.org/get')

print(response)

Saída:

<Response [200]>

O objeto Response contém a resposta da requisição HTTP, para acessar o conteúdo da resposta, basta acessar o atributo text.

import requests

response = requests.get('https://httpbin.org/get')

print(response.text)

Saída:

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Accept-Language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7", 
    "Host": "httpbin.org", 
    "Sec-Ch-Ua": "\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"", 
    "Sec-Ch-Ua-Mobile": "?0", 
    "Sec-Ch-Ua-Platform": "\"Windows\"", 
    "Sec-Fetch-Dest": "document", 
    "Sec-Fetch-Mode": "navigate", 
    "Sec-Fetch-Site": "none", 
    "Sec-Fetch-User": "?1", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-64555738-2ed5031d33327b7d642be639"
  }, 
  "origin": "177.126.84.113", 
  "url": "https://httpbin.org/get"
}

Além do atributo text, o objeto Response possui outros atributos que podem ser acessados:

  • status_code: código de status da resposta;
  • headers: cabeçalhos da resposta;
  • content: conteúdo da resposta em bytes;
  • json(): conteúdo da resposta em formato JSON(se a resposta não for um JSON, uma exceção será lançada);
  • cookies: cookies da resposta;
  • next: retorna a próxima página de uma resposta paginada.

Requisição POST

A requisição POST é usada para enviar dados para um servidor Web.

Para fazer uma requisição POST com a biblioteca Requests, basta chamar a função post() e passar a URL e os dados a serem enviados como argumentos.

Os dados a serem enviados podem ser passados através do parâmetro data ou json, o parâmetro data é usado para enviar dados no formato form-urlencoded e o parâmetro json é usado para enviar dados no formato JSON.

import requests

response = requests.post('https://httpbin.org/post', data={'nome': 'Covil do Dev'})

print(response.text)

Saída:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "nome": "Covil do Dev"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "17", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-64555883-6fd2e0d2663eb6336afbc853"
  }, 
  "json": null, 
  "origin": "34.90.27.120", 
  "url": "https://httpbin.org/post"
}

Caso você queira enviar os dados no formato JSON, basta passar o parâmetro json com os dados a serem enviados.

import requests

response = requests.post('https://httpbin.org/post', json={'nome': 'Covil do Dev'})

print(response.text)

Saída:

{
  "args": {}, 
  "data": "{\"nome\": \"Covil do Dev\"}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "23", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-64555901-4a9a3a2e4b5a3a7e4a2a2a2a"
  }, 
  "json": {
    "nome": "Covil do Dev"
  }, 
  "origin": "34.90.27.120", 
  "url": "https://httpbin.org/post"
}

Headers

Os cabeçalhos HTTP permitem que o cliente e o servidor passem informações adicionais com a solicitação ou resposta HTTP.

Para enviar cabeçalhos HTTP com a biblioteca Requests, basta passar o parâmetro headers com os cabeçalhos a serem enviados.

import requests

response = requests.get('https://httpbin.org/get', headers={'User-Agent': 'Covil do Dev'})

print(response.text)

Saída:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "Covil do Dev", 
    "X-Amzn-Trace-Id": "Root=1-6455595a-79e1d006184c87d321e81b01"
  }, 
  "origin": "34.90.27.120", 
  "url": "https://httpbin.org/get"
}

Cookies

Os cookies são usados para armazenar informações sobre o usuário.

Para enviar cookies com a biblioteca Requests, basta passar o parâmetro cookies com os cookies a serem enviados.

import requests

response = requests.get('https://httpbin.org/cookies', cookies={'nome': 'Covil do Dev'})

print(response.text)

Saída:

{
  "cookies": {
    "nome": "Covil do Dev"
  }
}

Autenticação

A autenticação é o processo de verificar se um usuário é quem ele diz ser.

A biblioteca Requests suporta vários tipos de autenticação, como Basic, Digest, OAuth, Hawk, AWS Signature, HTTP e Token.

Autenticação Básica

A autenticação básica é um método de autenticação HTTP simples, onde o nome de usuário e a senha são enviados no cabeçalho Authorization de uma solicitação HTTP.

Para fazer uma solicitação HTTP com autenticação básica, basta passar o parâmetro auth com o nome de usuário e a senha.

import requests

response = requests.get('https://httpbin.org/basic-auth/covildodev/123456', auth=('covildodev', '123456'))

print(response.text)

Saída:

{
  "authenticated": true, 
  "user": "covildodev"
}

Caso a autenticação falhe, o código de status 401 será retornado.

import requests

response = requests.get('https://httpbin.org/basic-auth/covildodev/123456', auth=('covildodev', '123'))

print(response.status_code)

Saída:

401

Utilizando Proxies

Um proxy é um servidor que atua como intermediário entre o cliente e o servidor de destino.

Para fazer uma solicitação HTTP usando um proxy, basta passar o parâmetro proxies com o endereço do proxy.

import requests

response = requests.get('https://httpbin.org/get', proxies={'http': 'http://localhost:8080'})

print(response.text)

Saída:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-64555a79-020f2d5644607c0312a6df5c"
  }, 
  "origin": "34.90.27.120", 
  "url": "https://httpbin.org/get"
}

Conclusão

Neste artigo, você aprendeu como fazer solicitações HTTP usando a biblioteca Requests em Python.

Para saber mais sobre a biblioteca Requests, consulte a documentação oficial.

Obrigado por visitar o blog e por ler esse artigo, se tive qualquer dúvida, ideia ou sugestão, não hesite em entrar em contato pelo meu e-mail: lindomar@covildodev.com.br