Passar para o conteúdo principal

Módulo Requests

Requests Module in Python

O módulo requests facilita a interação com páginas da web e APIs simplificando o processo de envio de solicitações e manipulação de respostas. Com requests, você pode recuperar dados da web de maneira rápida e fácil e usá-los em seus projetos Python. Neste artigo, exploraremos o módulo requests e suas funcionalidades, e demonstraremos como usá-lo no seu código Python.

Algumas Palavras sobre o módulo requests

O módulo Requests em Python é uma biblioteca HTTP que permite enviar solicitações HTTP/1.1 usando Python. No entanto, se você encontrar o erro no module named requests ao tentar usar o módulo requests em Python, significa que o módulo não está instalado ou não está acessível no seu ambiente.

Para instalar o módulo requests, você pode simplesmente executar o seguinte comando no seu terminal:

pip install requests

Uma vez que você instalou a biblioteca Requests, você pode usá-la para enviar solicitações a servidores web via Python. Abaixo está um exemplo de código simples que demonstra como usar o módulo Requests para solicitar data de um site:

import requests

response = requests.get('https://www.example.com')
print(response.text)

Neste exemplo, nós import o módulo Requests e usamos o método requests.get() para enviar uma solicitação GET ao site especificado no parâmetro. O atributo response.text contém os data retornados pelo site, os quais nós print no console.

Aqui está outro exemplo mostrando como enviar uma solicitação POST com alguns dados:

import requests

data = {'key': 'value'}
response = requests.post('https://www.example.com', data=data)
print(response.text)

Neste exemplo, usamos o método requests.post() para enviar uma solicitação POST para o site especificado no parâmetro. Nós também passamos alguns data como um dicionário, que será enviado como data de formulário com a requisição. O atributo response.text contém os dados retornados pelo site, que nós imprimimos para o console.

Requisições com JSON

JSON é um formato de dados popular usado para troca de dados entre sistemas. Neste contexto, vamos aprender a utilizar pedidos Python para enviar e receber dados JSON.

Para enviar uma requisição post com JSON usando requests, use o método post e passe os dados JSON usando o parâmetro json.

import requests

data = {
    'name': 'John Doe',
    'email': '[email protected]',
    'message': 'Hello world!'
}

response = requests.post('https://example.com/api', json=data)

print(response.status_code)
print(response.json())

Para enviar um pedido GET com JSON, utilize o método get e passe os dados JSON utilizando o parâmetro params.

import requests

params = {
    'category': 'books',
    'page': 1
}

response = requests.get('https://example.com/api', params=params)

print(response.status_code)
print(response.json())

Para enviar dados JSON como o corpo do pedido, utilize o parâmetro data em vez do parâmetro params.

import requests
import json

data = {
    'name': 'John Doe',
    'email': '[email protected]',
    'message': 'Hello world!'
}

response = requests.post('https://example.com/api', data=json.dumps(data))

print(response.status_code)
print(response.json())

Em resumo, requests facilita o envio e recebimento de dados JSON. Utilize o parâmetro json ou data dependendo se você está enviando uma requisição POST ou GET. Tenha em mente que o servidor deve ser capaz de processar os dados JSON que você enviar.

Como definir o tempo limite do `requests

Se você está usando Python requests para fazer requisições HTTP, é essencial definir um valor de timeout para evitar requisições que durem muito tempo. Definir um valor de timeout é fácil com a biblioteca requests. Aqui estão dois exemplos de código para definir o valor de timeout usando o método get.

import requests

response = requests.get("https://www.example.com", timeout=5)

No exemplo acima, definimos um valor de tempo limite de 5 segundos. Portanto, se o servidor não responder dentro de 5 segundos, a solicitação irá gerar uma exceção requests.exceptions.Timeout.

import requests

try:
    response = requests.get("https://www.example.com", timeout=5)
    response.raise_for_status()
except requests.exceptions.HTTPError as errh:
    print("HTTP Error:", errh)
except requests.exceptions.ConnectionError as errc:
    print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
    print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
    print("Something went wrong:", err)

No exemplo acima, usamos um bloco try-except para tratar exceções. Se a solicitação demorar mais de 5 segundos, ela irá lançar uma exceção requests.exceptions.Timeout.

Ao definir o valor de tempo limite, prevenimos que o programa fique esperando indefinidamente e podemos tratar os erros de forma elegante.

Atributos dos Requests

Requests fornece vários atributos que podem ser usados para personalizar e acessar diferentes partes de uma requisição, como o corpo da requisição, cabeçalhos, resposta e cookies.

Corpo da Requisição

Para enviar dados no corpo da requisição, você pode usar o parâmetro data com um dicionário de pares chave-valor. Aqui está um exemplo:

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://example.com', data=payload)

Cabeçalhos

Cabeçalhos podem ser adicionados a uma solicitação usando o parâmetro headers. Isso pode ser útil ao enviar tokens de autorização ou cabeçalhos customizados. Aqui está um exemplo:

import requests

headers = {'Authorization': 'Bearer my_token', 'Custom-Header': 'value'}
response = requests.get('https://example.com', headers=headers)

Resposta

O objeto response contém a response do servidor à solicitação. Ele inclui atributos como o código de status da response, conteúdo e cabeçalhos. Aqui está um exemplo:

import requests

response = requests.get('https://example.com')
print(response.status_code)
print(response.content)
print(response.headers)

Cookies

Cookies podem ser acessados e configurados usando o atributo cookies. Isso pode ser útil para manter uma session ou configurar dados persistentes. Aqui está um exemplo:

import requests

login_data = {'username': 'my_username', 'password': 'my_password'}
response = requests.post('https://example.com/login', data=login_data)

# Get the session cookie
session_cookie = response.cookies['session']

# Use the session cookie for subsequent requests
response2 = requests.get('https://example.com/protected', cookies={'session': session_cookie})

Sessão de Requisições

A Sessão de Requisições do Python é uma ferramenta poderosa que permite manter a persistência de suas requisições HTTP dentro de um único objeto session. Isso significa que você pode facilmente reutilizar a mesma conexão para múltiplas requisições, com cada requisição construindo a partir da anterior.

Usando a biblioteca integrada requests no Python, o recurso de Sessões mantém variáveis de session, incluindo cookies. Assim, permite-se ter um armazenamento temporário do lado do cliente. Aqui está um exemplo de código que ilustra a Sessão de Requisições do Python:

import requests

session = requests.Session()
session.get('http://example.com')

Neste código, criamos um novo objeto Session e então usamos o método get() para fazer uma solicitação GET para a URL fornecida. Por padrão, esta solicitação incluirá os cabeçalhos e cookies relevantes que foram definidos nas solicitações anteriores feitas com este objeto session.

Sessões são úteis para emular sessões com estado, onde cookies HTTP são usados para lembrar o estado do lado do servidor. Outro exemplo seria acelerar solicitações para o mesmo servidor reutilizando a mesma conexão TCP. Isso significa que o servidor pode enviar a resposta imediatamente e não precisa gastar tempo configurando uma nova conexão TCP.

Aqui está um exemplo de como adicionar um cabeçalho à session, que estará presente em todas as solicitações subsequentes:

import requests

session = requests.Session()
session.headers.update({'x-test': 'true'})

session.get('http://httpbin.org/headers')

Dentro da Session, definimos o cabeçalho x-test como true. Então, quaisquer solicitações subsequentes feitas com este objeto session para 'http://httpbin.org/headers' incluirão este cabeçalho.

Em conclusão, a Sessão de Solicitações Python oferece uma maneira poderosa e flexível de persistir o estado da conexão através de múltiplas solicitações HTTP. É uma ferramenta indispensável para qualquer desenvolvedor que trabalhe com dados de solicitação/resposta HTTP em Python.

Como Baixar Arquivo com Requests

Para baixar um arquivo usando o módulo requests em Python, você pode usar o método get(). Este método permite que você faça uma solicitação para a URL especificada e recupere o conteúdo como um objeto semelhante a um arquivo. Você pode então escrever o conteúdo em um arquivo no seu computador local.

import requests

url = 'https://example.com/image.jpg'
response = requests.get(url)

with open('image.jpg', 'wb') as f:
    f.write(response.content)

Neste exemplo, estamos baixando uma imagem da URL https://example.com/image.jpg e salvando-a em um arquivo chamado image.jpg. O atributo response.content contém o conteúdo binário da imagem, que escrevemos no arquivo usando o método write().

Outro exemplo é baixar um arquivo CSV e salvar no disco:

import requests

url = 'https://example.com/data.csv'
response = requests.get(url)

with open('data.csv', 'wb') as f:
    f.write(response.content)

Neste exemplo, estamos baixando um arquivo CSV de https://example.com/data.csv e salvando como data.csv. Como antes, escrevemos o conteúdo no arquivo usando o método write().

Em ambos os exemplos, usamos o módulo requests para fazer uma solicitação GET para a URL especificada, e recuperamos o conteúdo binário usando o atributo response.content. Em seguida, escrevemos este conteúdo binário em um arquivo no disco usando a função open() em combinação com um bloco with.

Então, é assim que você pode baixar um arquivo com requests em Python.

Usando Proxy em Requests

Se você quer enviar solicitações HTTP em Python através de um proxy, você pode usar a biblioteca requests. Aqui está como fazer isso:

import requests

url = 'some_url'

proxies = {
  'http': 'http://user:password@proxy:port',
  'https': 'https://user:password@proxy:port'
}

response = requests.get(url, proxies=proxies)

No exemplo de código acima, você precisa substituir user, password, proxy e port com suas credenciais reais e endereço de proxy e número da porta.

Ao usar essas configurações de proxy em suas solicitações HTTP Python, você pode facilmente contornar quaisquer restrições impostas à sua rede e acessar os recursos desejados sem qualquer problema. Além disso, você pode escalar seu serviço para ser mais robusto e independente, enquanto protege sua rede de usuários externos.

Como Converter curl para solicitação Python

Converter um comando curl para solicitação Python é uma tarefa comum para aqueles que trabalham com APIs ou solicitações web.

Aqui estão dois exemplos de como converter um comando curl em solicitação Python usando o módulo requests:

Comando curl

curl https://jsonplaceholder.typicode.com/posts/1

Código de Requisição em Python

import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

print(response.json())

Comando curl Mais Complexo

curl -X POST \
  https://httpbin.org/post \
  -H 'Content-Type: application/json' \
  -d '{"name": "John Doe", "age": 25}'

Código request em Python

import requests

url = 'https://httpbin.org/post'
headers = {'Content-Type': 'application/json'}
data = '{"name": "John Doe", "age": 25}'

response = requests.post(url, headers=headers, data=data)

print(response.json())

Em conclusão, converter curl para pedido Python pode ser feito facilmente usando o módulo requests. Ao entender a sintaxe correta e a estrutura do comando curl, é possível replicar o mesmo pedido em Python com poucas linhas de código.

Rest API

Python é uma linguagem popular para construir APIs RESTful devido à sua sintaxe simples e vasta coleção de bibliotecas. Com Python, os desenvolvedores podem facilmente fazer chamadas diretas à API e extrair data de serviços web populares.

Exemplo de Chamada de API em Python

Abaixo está um exemplo de como fazer uma chamada de API usando Python:

import requests

url = "https://api.example.com/data"
response = requests.get(url)

print(response.json())

No trecho de código acima, nós import o módulo Python 'requests', usamos a URL do endpoint da API e executamos o pedido usando o método 'get'. Finalmente, nós print os data recuperados no formato JSON.

Como usar APIs RESTful em Python

Python fornece uma biblioteca chamada Flask que é amplamente usada para construir APIs REST. Para criar uma API RESTful usando o Flask, você precisa instalar o Flask e usar as capacidades de roteamento para definir os endpoints da API.

Como criar um endpoint de API usando Flask

from flask import Flask

app = Flask(__name__)

@app.route('/api/data')
def get_data():
    data = {"name": "John", "age": 30, "city": "New York"}
    return data

if __name__ == '__main__':
    app.run(port=5000)

No código acima, definimos uma app simples do Flask com um endpoint para recuperar data. A função 'get_data' recupera um objeto data de amostra e o retorna como JSON.

Em resumo, Python é uma excelente linguagem para trabalhar com APIs RESTful devido à sua facilidade de uso e uma grande variedade de bibliotecas existentes disponíveis. Usando Python e Flask, os desenvolvedores podem construir rapidamente APIs REST de alto desempenho, tornando-a uma escolha popular para muitos projetos de desenvolvimento.

Contribua connosco!

Não hesite em contribuir para os tutoriais Python no GitHub: crie uma bifurcação, actualize o conteúdo e emita um pedido de retirada.

Profile picture for user AliaksandrSumich
Python engineer, expert in third-party web services integration.
Atualizado: 2024-05-03 22:51
Profile picture for user angarsky
Revisto e aprovado