Guia Completo para Upload de Arquivos com a Biblioteca Requests no Python

A biblioteca requests é a mais utilizada para upload de arquivos em Python. Neste guia, vamos explicar detalhadamente desde as técnicas básicas para realizar uploads de arquivos com requests, até exemplos avançados e tratamento de erros. Vamos progredir passo a passo para garantir que até mesmo iniciantes possam acompanhar com facilidade. Aproveite este guia para adquirir habilidades em upload de arquivos com Python.

Índice

Instalação da Biblioteca requests

Para usar a biblioteca requests no Python, primeiro é necessário instalá-la. A seguir, mostramos o procedimento de instalação.

Procedimento de Instalação

A instalação da biblioteca requests pode ser facilmente feita usando o pip. Execute o seguinte comando:

pip install requests

Verificando a Instalação

Após a instalação, execute o código abaixo no interpretador para verificar se a biblioteca requests foi instalada corretamente.

import requests  

print(requests.__version__)

Se a versão do requests for exibida, a instalação foi bem-sucedida.

Método Básico de Upload de Arquivos

Vamos explicar o método básico para upload de arquivos usando a biblioteca requests. Nesta seção, apresentamos um exemplo simples de código para upload de arquivos e explicamos como ele funciona.

Exemplo Básico de Código

A seguir está um exemplo básico de código para fazer o upload de um arquivo usando a biblioteca requests.

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Arquivo a ser enviado  
files = {'file': open('testfile.txt', 'rb')}  

# Enviar requisição POST  
response = requests.post(url, files=files)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • import requests: Importa a biblioteca requests.
  • url: Especifica a URL de destino para o upload.
  • files: Especifica o arquivo a ser enviado em formato de dicionário, onde a chave é ‘file’ e o valor é o objeto de arquivo.
  • requests.post(): Envia uma requisição POST. O arquivo é passado pelo parâmetro files.
  • response.status_code: Exibe o código de status da resposta. Se o código retornado for 200, o upload foi bem-sucedido.

Com esse método básico, você pode realizar facilmente o upload de arquivos usando Python. Em seguida, vamos abordar o upload de arquivos utilizando dados de formulário multipart.

Upload de Dados de Formulário Multipart

Explicaremos como fazer o upload de dados de formulário multipart utilizando a biblioteca requests. Essa técnica é útil quando você precisa enviar outros dados junto com o arquivo.

Exemplo Básico de Código para Upload Multipart

A seguir, um exemplo de código para enviar um arquivo juntamente com outros dados de formulário.

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Arquivo e outros dados a serem enviados  
files = {'file': open('testfile.txt', 'rb')}  
data = {'name': 'testfile', 'description': 'This is a test file'}  

# Enviar requisição POST  
response = requests.post(url, files=files, data=data)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • files: Especifica o arquivo a ser enviado em formato de dicionário. A chave é ‘file’ e o valor é o objeto de arquivo.
  • data: Especifica os dados adicionais do formulário em formato de dicionário. Neste exemplo, estamos enviando dois campos: ‘name’ e ‘description’.
  • requests.post(): Envia uma requisição POST contendo o arquivo e os dados do formulário, utilizando os parâmetros files e data.

Vantagens do Upload Multipart

Utilizar dados de formulário multipart proporciona as seguintes vantagens:

  • Permite enviar arquivos e dados de texto simultaneamente
  • Facilita o envio de arquivos como parte de uma estrutura de dados mais complexa

Com esse método, é possível não apenas fazer upload de arquivos, mas também enviar dados complementares, permitindo transferências de dados mais flexíveis. A seguir, vamos discutir os possíveis erros que podem ocorrer durante o upload e como tratá-los.

Tratamento de Erros

Vamos explicar os possíveis erros que podem ocorrer durante o upload de arquivos e como lidar com eles. Um tratamento adequado de erros pode melhorar a confiabilidade do programa e a experiência do usuário.

Método Básico de Tratamento de Erros

A seguir, um exemplo de código para tratamento básico de erros ao fazer upload de arquivos com a biblioteca requests.

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Arquivo a ser enviado  
files = {'file': open('testfile.txt', 'rb')}  

try:  
    # Enviar requisição POST  
    response = requests.post(url, files=files)  
    response.raise_for_status()  # Gera um HTTPError se o código de status não for 200  
except requests.exceptions.RequestException as e:  
    print(f'Ocorreu um erro durante o upload: {e}')  
else:  
    print('O arquivo foi enviado com sucesso')

Explicação do Código

  • Bloco try: Executa a requisição de upload de arquivo.
  • response.raise_for_status(): Gera uma exceção requests.exceptions.HTTPError se o código de status não for 200.
  • except requests.exceptions.RequestException as e: Captura todas as exceções relacionadas ao requests e exibe uma mensagem de erro.
  • Bloco else: Código executado caso nenhum erro ocorra.

Exemplos de Erros Específicos e Como Lidá-los

  • Erro HTTP: Ocorre quando o servidor não aceita a requisição. Pode ser detectado usando response.raise_for_status().
  • Erro de Conexão: Ocorre quando não é possível conectar ao servidor, por exemplo, devido a uma falha na rede. Pode ser capturado com requests.exceptions.ConnectionError.
  • Erro de Timeout: Ocorre quando a requisição excede o tempo limite. Pode ser capturado com requests.exceptions.Timeout.
import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Arquivo a ser enviado  
files = {'file': open('testfile.txt', 'rb')}  

try:  
    # Enviar requisição POST (com timeout definido)  
    response = requests.post(url, files=files, timeout=10)  
    response.raise_for_status()  
except requests.exceptions.Timeout:  
    print('A requisição excedeu o tempo limite')  
except requests.exceptions.ConnectionError:  
    print('Ocorreu um erro de conexão')  
except requests.exceptions.HTTPError as http_err:  
    print(f'Ocorreu um erro HTTP: {http_err}')  
except requests.exceptions.RequestException as e:  
    print(f'Ocorreu um erro: {e}')  
else:  
    print('O arquivo foi enviado com sucesso')

Um tratamento adequado de erros melhora a estabilidade e confiabilidade do programa. Em seguida, vamos abordar como fazer upload de múltiplos arquivos.

Exemplo Avançado: Upload de Múltiplos Arquivos

Vamos apresentar como fazer o upload de múltiplos arquivos de uma só vez utilizando a biblioteca requests. Nesta seção, fornecemos um exemplo de código prático para realizar o upload de múltiplos arquivos com eficiência.

Exemplo de Código para Upload de Múltiplos Arquivos

A seguir está um exemplo de código para enviar múltiplos arquivos.

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Múltiplos arquivos a serem enviados  
files = {  
    'file1': open('testfile1.txt', 'rb'),  
    'file2': open('testfile2.txt', 'rb')  
}  

# Enviar requisição POST  
response = requests.post(url, files=files)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • files: Especifica os múltiplos arquivos em formato de dicionário. As chaves são os nomes dos arquivos e os valores são os objetos de arquivo.
  • requests.post(): Envia uma requisição POST contendo os múltiplos arquivos pelo parâmetro files.

Combinação com Dados Adicionais de Formulário

É possível enviar dados adicionais de formulário juntamente com múltiplos arquivos. Veja o exemplo a seguir:

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Múltiplos arquivos a serem enviados  
files = {  
    'file1': open('testfile1.txt', 'rb'),  
    'file2': open('testfile2.txt', 'rb')  
}  

# Dados adicionais de formulário  
data = {  
    'username': 'testuser',  
    'description': 'Uploading multiple files'  
}  

# Enviar requisição POST  
response = requests.post(url, files=files, data=data)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • files: Especifica os múltiplos arquivos em formato de dicionário.
  • data: Especifica os dados adicionais de formulário em formato de dicionário. Neste exemplo, estamos enviando o nome do usuário e uma descrição.
  • requests.post(): Envia uma requisição POST contendo os arquivos e os dados adicionais.

Esse método permite enviar múltiplos arquivos de forma eficiente, juntamente com os dados adicionais necessários. A seguir, explicaremos como fazer upload de arquivos em sites que exigem autenticação.

Upload de Arquivos com Autenticação

Vamos explicar como fazer o upload de arquivos em sites que exigem autenticação. Usando a biblioteca requests, é fácil enviar requisições com informações de autenticação.

Exemplo Básico de Autenticação

Mostramos a seguir um exemplo básico de código para fazer upload de arquivos em sites que exigem autenticação HTTP básica.

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Informações de autenticação  
auth = ('username', 'password')  

# Arquivo a ser enviado  
files = {'file': open('testfile.txt', 'rb')}  

# Enviar requisição POST  
response = requests.post(url, files=files, auth=auth)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • auth: Especifica as informações de autenticação como uma tupla, contendo o nome de usuário e a senha.
  • requests.post(): Envia a requisição com as informações de autenticação usando o parâmetro auth.

Exemplo de Autenticação com Token

Mostramos a seguir um exemplo de código para autenticação com token, utilizando o Bearer token.

import requests  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Cabeçalho de autenticação com token  
headers = {'Authorization': 'Bearer your_token_here'}  

# Arquivo a ser enviado  
files = {'file': open('testfile.txt', 'rb')}  

# Enviar requisição POST  
response = requests.post(url, files=files, headers=headers)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • headers: Especifica o cabeçalho de autenticação em formato de dicionário. Neste caso, utilizamos o Bearer token.
  • requests.post(): Envia a requisição com o cabeçalho de autenticação utilizando o parâmetro headers.

Exemplo de Autenticação OAuth

Mostramos a seguir um exemplo de código para autenticação com OAuth. Utilizamos o OAuth2.0 para obter o token de acesso e, em seguida, enviamos o arquivo usando esse token.

import requests  
from requests_oauthlib import OAuth2Session  

# Configuração do OAuth2  
client_id = 'your_client_id'  
client_secret = 'your_client_secret'  
authorization_base_url = 'https://example.com/oauth/authorize'  
token_url = 'https://example.com/oauth/token'  

# Criar sessão OAuth2  
oauth = OAuth2Session(client_id)  
authorization_url, state = oauth.authorization_url(authorization_base_url)  

# Mostrar URL de autenticação para o usuário e obter a URL de redirecionamento  
print('Please go to {} and authorize access.'.format(authorization_url))  
redirect_response = input('Paste the full redirect URL here: ')  

# Obter o token  
oauth.fetch_token(token_url, authorization_response=redirect_response, client_secret=client_secret)  

# URL de destino do upload  
url = 'https://example.com/upload'  

# Arquivo a ser enviado  
files = {'file': open('testfile.txt', 'rb')}  

# Enviar requisição POST  
response = oauth.post(url, files=files)  

# Verificar o código de status da resposta  
print(response.status_code)

Explicação do Código

  • OAuth2Session: Cria uma sessão OAuth2.
  • authorization_url: Gera a URL para o usuário autorizar o acesso.
  • fetch_token(): Obtém o token de acesso utilizando a URL de redirecionamento fornecida pelo usuário.
  • oauth.post(): Utiliza a sessão OAuth para enviar o arquivo.

Quando a autenticação é necessária, o upload de arquivos pode ser realizado dessa forma. Em seguida, vamos apresentar alguns exercícios práticos para você colocar em prática o que aprendeu.

Exercícios Práticos

A seguir, fornecemos exercícios para praticar o upload de arquivos com a biblioteca requests. Resolva os exercícios para aprofundar seu entendimento.

Exercício 1: Upload Básico de Arquivo

Siga as instruções abaixo para escrever um código de upload básico de arquivo.

  1. Instale a biblioteca requests.
  2. Escolha um arquivo e envie-o para uma URL de destino utilizando uma requisição POST.
  3. Exiba o código de status para confirmar o sucesso do upload.

Exemplo

import requests  

url = 'https://example.com/upload'  
files = {'file': open('example.txt', 'rb')}  
response = requests.post(url, files=files)  
print(response.status_code)

Exercício 2: Upload com Dados de Formulário Multipart

Siga as instruções abaixo para escrever um código que faça upload de dados de formulário multipart.

  1. Envie um arquivo juntamente com o nome de usuário e uma descrição.
  2. Envie a requisição POST para uma URL de destino.
  3. Exiba o código de status para confirmar o sucesso do upload.

Exemplo

import requests  

url = 'https://example.com/upload'  
files = {'file': open('example.txt', 'rb')}  
data = {'username': 'testuser', 'description': 'Test file upload'}  
response = requests.post(url, files=files, data=data)  
print(response.status_code)

Exercício 3: Upload de Arquivo com Tratamento de Erros

Siga as instruções abaixo para escrever um código de upload de arquivo com tratamento de erros.

  1. Adicione um bloco try-except ao código de upload básico.
  2. Lide com erros de conexão, timeout e HTTP.

Exemplo

import requests  

url = 'https://example.com/upload'  
files = {'file': open('example.txt', 'rb')}  

try:  
    response = requests.post(url, files=files, timeout=10)  
    response.raise_for_status()  
except requests.exceptions.Timeout:  
    print('A requisição excedeu o tempo limite')  
except requests.exceptions.ConnectionError:  
    print('Ocorreu um erro de conexão')  
except requests.exceptions.HTTPError as http_err:  
    print(f'Ocorreu um erro HTTP: {http_err}')  
except requests.exceptions.RequestException as e:  
    print(f'Ocorreu um erro: {e}')  
else:  
    print('O arquivo foi enviado com sucesso')

Exercício 4: Upload de Múltiplos Arquivos

Siga as instruções abaixo para escrever um código de upload de múltiplos arquivos.

  1. Escolha dois ou mais arquivos e envie-os para uma URL de destino utilizando uma requisição POST.
  2. Exiba o código de status para confirmar o sucesso do upload.

Exemplo

import requests  

url = 'https://example.com/upload'  
files = {  
    'file1': open('example1.txt', 'rb'),  
    'file2': open('example2.txt', 'rb')  
}  
response = requests.post(url, files=files)  
print(response.status_code)

Exercício 5: Upload de Arquivo com Autenticação

Siga as instruções abaixo para escrever um código de upload de arquivo com autenticação.

  1. Use autenticação HTTP básica ou com token para fazer o upload do arquivo.
  2. Envie a requisição POST para uma URL de destino.
  3. Exiba o código de status para confirmar o sucesso do upload.

Exemplo (Autenticação HTTP Básica)

import requests  

url = 'https://example.com/upload'  
auth = ('username', 'password')  
files = {'file': open('example.txt', 'rb')}  
response = requests.post(url, files=files, auth=auth)  
print(response.status_code)

Praticando com os exercícios acima, você pode aprender a lidar com vários cenários de upload de arquivos usando a biblioteca requests. A seguir, vamos resumir o conteúdo deste artigo.

Resumo

Neste artigo, abordamos como realizar uploads de arquivos utilizando a biblioteca requests no Python, desde técnicas básicas até cenários mais avançados. A seguir, resumimos os principais pontos discutidos:

  • Instalação da biblioteca requests: Pode ser facilmente feita com o comando pip install requests.
  • Upload básico de arquivos: Aprendemos a realizar o upload de um único arquivo.
  • Upload de dados de formulário multipart: Apresentamos como enviar arquivos e dados de formulário simultaneamente.
  • Tratamento de erros: Vimos como lidar com erros que podem ocorrer durante o upload de arquivos.
  • Upload de múltiplos arquivos: Explicamos como enviar múltiplos arquivos de uma vez.
  • Upload de arquivos com autenticação: Aprendemos como enviar arquivos com informações de autenticação.

Com esses conhecimentos, você poderá realizar uploads de arquivos em vários cenários. Pratique com os exercícios para consolidar seu aprendizado.

Índice