CodeGym /Corsi /Python SELF IT /Lavorare con la rete in pratica

Lavorare con la rete in pratica

Python SELF IT
Livello 23 , Lezione 3
Disponibile

4.1 Gestione delle risposte

Il modulo requests offre metodi comodi per lavorare con le risposte del server.

Status codes

Oltre alla risposta, il server invia anche lo stato dell'elaborazione della richiesta. L'informazione sullo stato si trova nei campi status_code e reason. Ecco un esempio:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Mostra lo status code della risposta
print(response.reason)  # Mostra la descrizione testuale dello status
print(response.ok)  # Restituisce True se lo status code è inferiore a 400
        

Headers

Beh, naturalmente, quale richiesta HTTP senza headers? Se ti servono gli headers della richiesta o quelli della risposta, puoi accedervi tramite il campo headers:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Mostra gli headers della risposta
print(response.headers['Content-Type'])  # Mostra il valore di un header specifico
            

Body della risposta

La risposta del server può contenere un set di byte, testo, json o xml. Se sai esattamente cosa stai richiedendo al server, puoi ottenere subito un oggetto del tipo necessario utilizzando uno dei metodi/campi:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Mostra il corpo della risposta come testo
print(response.json())  # Mostra il corpo della risposta come JSON
print(response.content)  # Mostra il corpo della risposta come byte
        

Scoprirai di più sugli headers (headers) e gli status delle risposte nelle lezioni su come funziona la rete.

4.2 Gestione degli errori

Il modulo requests offre eccezioni per la gestione degli errori.

Lo standard HTTP non prevede eccezioni, funziona invece con codici di errore (status_code). Se vuoi che un fallimento nella richiesta generi un'eccezione in Python, devi chiamare esplicitamente la funzione raise_for_status().

Esempio:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Genera un'eccezione per status codes 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!")
        

Puoi saperne di più sui codici di errore nelle lezioni su come funziona la rete.

4.3 Invio dei dati

Prima dell'invenzione del JSON, grandi quantità di dati venivano inviate tramite "forma". La forma è un oggetto speciale di una pagina del browser (e standard dei dati in HTTP). Se vuoi inviare dati "tramite forma", devi semplicemente includere il parametro data nella richiesta.

Importante! Le richieste GET non supportano le forme, poiché non contengono un body di richiesta. Tutti i loro dati vengono trasmessi solo nell'URL.

Invio dati in GET-request

In un GET-request i dati vengono trasmessi attraverso i parametri dell'URL. Ecco un esempio:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Mostra l'URL con i parametri aggiunti
    

Invio di dati tramite forma

Utilizziamo un POST-request per inviare dati al server.

Esempio:


import requests

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

Invio di file

Se vuoi inviare su internet dati binari, per esempio, caricare un'immagine, devi includere il tuo file o file nella richiesta usando il parametro files.

Esempio:


import requests

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

È semplice come due per due. Se vuoi inviare più file, devi elencarli con qualsiasi nome nella variabile files.

Importante! Non dimenticare di chiudere il file dopo l'invio, per evitare perdite di risorse. È meglio usare la costruzione with, che chiuderà automaticamente il file al termine dell'operazione:


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 autorizzazione

L'API (Application Programming Interface) è un insieme di regole e protocolli che permettono a diversi programmi di interagire tra loro. Molti siti e servizi consentono di inviare loro richieste e lavorare con la loro API solo dopo il login.

Dopo un login riuscito, ottieni un oggetto speciale, una sessione (session), che contiene un numero unico della tua "sessione autorizzata con il server". Per le richieste successive dovrai usare questo oggetto.

Autenticazione

Per loggarti su un server, devi passare attraverso l'autenticazione (processo di login), per cui devi trasmettere i dati dell'account con la richiesta.


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)
        
    

Così appare il processo di autorizzazione, ma di solito viene utilizzato insieme a una sessione.

Utilizzo delle sessioni

Le sessioni permettono di mantenere i parametri tra le richieste, come i cookies o le informazioni di autorizzazione dell'utente.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Creazione di una sessione
session = requests.Session()
            
# Login al sito
login_response = session.post('https://example.com/login', data = payload)
            
# Operazioni successive utilizzando la sessione dell'utente loggato
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION