CodeGym /Curso Java /Python SELF PT /Trabalhando com rede na prática

Trabalhando com rede na prática

Python SELF PT
Nível 23 , Lição 3
Disponível

4.1 Processamento de respostas

O módulo requests fornece métodos convenientes para trabalhar com as respostas do servidor.

Códigos de status

Além da resposta, o servidor ainda envia o status do processamento da solicitação. A informação sobre o status está nos campos status_code e reason. Veja o exemplo abaixo:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Exibe o código de status da resposta
print(response.reason)  # Exibe a descrição textual do status
print(response.ok)  # Retorna True, se o código de status for menor que 400
        

Cabeçalhos

E claro, qual é a solicitação HTTP sem cabeçalhos? Se você precisa dos cabeçalhos da solicitação ou da resposta, pode acessá-los através do campo headers:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Exibe os cabeçalhos da resposta
print(response.headers['Content-Type'])  # Exibe o valor de um cabeçalho específico
        

Corpo da resposta

A resposta do servidor pode conter um conjunto de bytes, texto, json ou xml. Se você sabe exatamente o que está solicitando do servidor, pode obter o objeto do tipo necessário imediatamente, usando um dos métodos/campos:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Exibe o corpo da resposta como texto
print(response.json())  # Exibe o corpo da resposta como JSON
print(response.content)  # Exibe o corpo da resposta como bytes
        

Você aprenderá mais sobre cabeçalhos (headers) e status de resposta nas aulas sobre como a rede funciona.

4.2 Tratamento de erros

O módulo requests fornece exceções para lidar com erros.

O padrão HTTP não prevê exceções, em vez disso ele trabalha com códigos de erro (status_code). Se você deseja que uma exceção Python seja gerada em um resultado de solicitação mal-sucedido, você precisa explicitamente chamar a função raise_for_status().

Exemplo:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Gera exceção para códigos de status 4xx e 5xx
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("Success!")
        

Você pode aprender mais sobre códigos de erro nas aulas sobre como a rede funciona.

4.3 Envio de dados

Antes da invenção do JSON, grandes volumes de dados eram enviados por "forma". A forma é um objeto especial da página do navegador (e padrão de dados em HTTP). Se você deseja enviar dados "por forma", você só precisa passar o parâmetro data junto com a solicitação.

Importante! Solicitações GET não suportam formas, porque não contêm corpo de solicitação. Todos os seus dados são passados apenas na URL.

Envio de dados em GET-request

Em GET-request, os dados são passados por parâmetros de URL. Aqui está um exemplo:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Exibirá a URL com os parâmetros adicionados
    

Envio de dados por forma

Vamos usar um POST-request para enviar dados ao servidor.

Exemplo:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

Envio de arquivos

Se você deseja enviar dados binários pela internet, por exemplo, fazer upload de uma imagem, você precisa passar seu arquivo ou arquivos na solicitação usando o parâmetro files.

Exemplo:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

Simples como dois e dois. Se você deseja enviar vários arquivos, liste-os com quaisquer nomes na variável files.

Importante! Não esqueça de fechar o arquivo após o envio para evitar vazamento de recursos. É melhor usar a construção with, que fechará automaticamente o arquivo após o fim da operação:


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 Login e autorização

API (Application Programming Interface) é um conjunto de regras e protocolos que permitem que diferentes programas interajam entre si. Muitos sites e serviços permitem que você envie solicitações e trabalhe com sua API apenas após o login.

Após um login bem-sucedido, você recebe um objeto especial – uma sessão (session), que contém um número único da sua "sessão autorizada com o servidor". Para solicitações futuras, você precisará usar esse objeto.

Autenticação

Para fazer login no servidor, você precisa fazer a autenticação (processo de login), para o qual é necessário passar as credenciais junto com a solicitação.


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

É assim que se parece o processo de autorização, mas geralmente ele é usado junto com a sessão.

Uso de sessões

As sessões permitem salvar parâmetros entre as solicitações, como cookies ou informações de autorização do usuário.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Criação de sessão
session = requests.Session()
            
# Login no site
login_response = session.post('https://example.com/login', data = payload)
            
# Trabalho adicional sob a sessão do usuário logado
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION