Come mantenere sessioni e cookie con la libreria requests di Python

La libreria requests di Python è uno strumento potente che consente di inviare richieste HTTP in modo semplice. Utilizzando questa libreria, è possibile gestire facilmente le sessioni e mantenere i cookie. In questo articolo, esploreremo in dettaglio come gestire e mantenere sessioni e cookie utilizzando la libreria requests. Attraverso esempi pratici ed esercizi, potrai acquisire competenze pratiche.

Indice

Nozioni di base su sessioni e cookie

Le sessioni e i cookie giocano un ruolo fondamentale nello sviluppo web. La sessione è un meccanismo che consente di mantenere temporaneamente le informazioni per ogni utente sul lato server, permettendo agli utenti di mantenere informazioni su più pagine. D’altra parte, i cookie sono utilizzati per memorizzare informazioni sul lato client, come l’identificazione dell’utente e la conservazione delle preferenze. Grazie ai cookie, gli utenti possono mantenere lo stato di accesso o conservare gli articoli nel carrello. Comprendere sessioni e cookie è essenziale per lo sviluppo di applicazioni web efficaci.

Installazione della libreria `requests`

Per gestire facilmente le richieste HTTP in Python, è necessario installare la libreria requests. Segui questi passaggi per completare l’installazione.

Installazione tramite pip

Per installare la libreria requests utilizza il gestore pacchetti di Python, pip. Esegui il seguente comando dalla riga di comando o dal terminale.

pip install requests

Verifica dell’installazione

Per verificare che la libreria requests sia stata installata correttamente, esegui il seguente comando nell’interprete Python.

import requests
print(requests.__version__)

Se il comando viene eseguito senza errori e viene visualizzato il numero di versione, l’installazione è andata a buon fine.

Creazione e utilizzo dell’oggetto sessione

Con la libreria requests, è possibile gestire le sessioni utilizzando un oggetto sessione. Creando un oggetto sessione, è possibile condividere cookie e configurazioni HTTP all’interno della stessa sessione.

Creazione dell’oggetto sessione

Per prima cosa, creiamo un oggetto sessione utilizzando la classe requests.Session.

import requests

# Creazione dell'oggetto sessione
session = requests.Session()

Invio di una richiesta utilizzando la sessione

Utilizzando l’oggetto sessione, possiamo inviare richieste HTTP e condividere cookie e altre informazioni di sessione. Questo è utile, ad esempio, quando vogliamo mantenere lo stato di autenticazione durante l’accesso a un’altra pagina dopo aver effettuato il login.

# Invia richiesta di login
login_url = 'https://example.com/login'
login_data = {'username': 'myusername', 'password': 'mypassword'}
session.post(login_url, data=login_data)

# Accedi alla pagina dopo l'autenticazione
dashboard_url = 'https://example.com/dashboard'
response = session.get(dashboard_url)

print(response.text)

Vantaggi dell’oggetto sessione

Utilizzando un oggetto sessione, si ottengono i seguenti vantaggi:

  • Condivisione dei cookie
  • Aumento delle prestazioni grazie al riutilizzo della connessione
  • Applicazione coerente delle impostazioni HTTP

Questo rende più semplice ed efficiente l’interazione con siti web complessi.

Impostazione e mantenimento dei cookie

Impostare e mantenere i cookie all’interno di una sessione è essenziale per mantenere le informazioni di autenticazione e le preferenze dell’utente. Qui vedremo come impostare e mantenere i cookie utilizzando la libreria requests.

Impostazione manuale dei cookie

Per impostare manualmente i cookie nell’oggetto sessione, utilizziamo il seguente codice.

import requests

# Creazione dell'oggetto sessione
session = requests.Session()

# Impostazione manuale dei cookie
session.cookies.set('cookie_name', 'cookie_value')

# Invia una richiesta con i cookie impostati
response = session.get('https://example.com/somepage')
print(response.text)

Recupero e mantenimento dei cookie dal server

I cookie ricevuti dal server vengono automaticamente salvati nell’oggetto sessione. In questo modo, i cookie vengono automaticamente utilizzati nelle richieste successive.

# Invia una richiesta di login e ottieni i cookie dal server
login_url = 'https://example.com/login'
login_data = {'username': 'myusername', 'password': 'mypassword'}
session.post(login_url, data=login_data)

# Accedi alla pagina con i cookie mantenuti
profile_url = 'https://example.com/profile'
response = session.get(profile_url)

print(response.text)

Visualizzazione e verifica dei cookie

Per visualizzare i cookie attualmente impostati nella sessione, possiamo utilizzare il seguente codice.

# Visualizza i cookie nella sessione
for cookie in session.cookies:
    print(f'{cookie.name}: {cookie.value}')

Questo ti permetterà di visualizzare tutti i cookie attualmente memorizzati nella sessione.

Esempio pratico: Login e mantenimento della sessione

In questo esempio, vedremo come accedere a un sito web che richiede il login e come mantenere la sessione attiva per accedere a più pagine. Questo metodo consente di mantenere lo stato di login senza dover accedere ogni volta.

Invio della richiesta di login

Per prima cosa, raccogliamo i dati necessari dal modulo di login del sito e inviamo una richiesta POST per tentare il login.

import requests

# Creazione dell'oggetto sessione
session = requests.Session()

# URL e dati di login
login_url = 'https://example.com/login'
login_data = {'username': 'myusername', 'password': 'mypassword'}

# Invia la richiesta di login
response = session.post(login_url, data=login_data)

# Verifica il successo del login
if response.status_code == 200 and 'dashboard' in response.text:
    print('Login riuscito')
else:
    print('Login fallito')

Accesso alla pagina dopo il login

Se il login ha avuto successo, le informazioni di autenticazione vengono memorizzate nella sessione, permettendoci di accedere a un’altra pagina protetta.

# Accedi a un'altra pagina dopo il login
dashboard_url = 'https://example.com/dashboard'
response = session.get(dashboard_url)

# Mostra il contenuto della dashboard
print(response.text)

Verifica del mantenimento della sessione

Accediamo a un’altra pagina per verificare che la sessione sia ancora attiva.

# Accedi alla pagina del profilo
profile_url = 'https://example.com/profile'
response = session.get(profile_url)

# Mostra il contenuto della pagina del profilo
print(response.text)

Con questo metodo, una volta effettuato il login, la sessione viene mantenuta e non sarà necessario effettuare nuovamente il login quando si accede ad altre pagine. Questo offre un’esperienza utente fluida.

Salvataggio e riutilizzo dei cookie

Salvando i cookie e riutilizzandoli in seguito, è possibile mantenere lo stato tra diverse sessioni. Qui vedremo come salvare e riutilizzare i cookie.

Salvataggio dei cookie

Per salvare i cookie in un file, possiamo utilizzare la libreria pickle insieme alla libreria requests.

import requests
import pickle

# Creazione dell'oggetto sessione
session = requests.Session()

# Invia richiesta di login
login_url = 'https://example.com/login'
login_data = {'username': 'myusername', 'password': 'mypassword'}
session.post(login_url, data=login_data)

# Salva i cookie in un file
with open('cookies.pkl', 'wb') as f:
    pickle.dump(session.cookies, f)

print("Cookie salvati")

Riutilizzo dei cookie

Per riutilizzare i cookie salvati e mantenere lo stato di login in una nuova sessione, carichiamo i cookie dal file.

import requests
import pickle

# Creazione di una nuova sessione
session = requests.Session()

# Carica i cookie dal file
with open('cookies.pkl', 'rb') as f:
    session.cookies.update(pickle.load(f))

# Invia richiesta mantenendo lo stato di autenticazione
profile_url = 'https://example.com/profile'
response = session.get(profile_url)

print(response.text)

Vantaggi del riutilizzo dei cookie

Il riutilizzo dei cookie comporta i seguenti vantaggi:

  • Consente di mantenere lo stato di login
  • Evita di dover effettuare nuovamente il login
  • Consente operazioni più efficienti negli script automatizzati

Ciò significa che, anche se la sessione scade, possiamo continuare a operare senza dover effettuare di nuovo il login grazie al riutilizzo dei cookie.

Migliori pratiche per la gestione delle sessioni

La gestione delle sessioni è cruciale per garantire la sicurezza e le prestazioni delle applicazioni web. Qui vediamo alcune delle migliori pratiche per la gestione delle sessioni e le considerazioni importanti.

Impostazione del timeout della sessione

Le sessioni non dovrebbero essere mantenute indefinitamente. Impostando un timeout appropriato, possiamo migliorare la sicurezza.

import requests

session = requests.Session()

# Imposta il timeout della sessione (esempio: 5 secondi)
response = session.get('https://example.com', timeout=5)

Salvataggio sicuro dei cookie

I cookie devono essere salvati in modo sicuro, poiché contengono informazioni di autenticazione. Ecco alcune considerazioni:

  • Non salvare i cookie in chiaro
  • Salva solo le informazioni necessarie
  • Imposta correttamente la scadenza dei cookie

Impostazione degli header HTTP

Impostare header HTTP appropriati può rafforzare la sicurezza della sessione. Ad esempio, è possibile utilizzare gli attributi Secure e HttpOnly.

import requests

session = requests.Session()

# Impostazione di un header personalizzato
session.headers.update({'User-Agent': 'my-app/0.0.1'})

Contromisure contro CSRF

Per contrastare gli attacchi CSRF (Cross-Site Request Forgery), utilizziamo l’autenticazione basata su token. Questo previene richieste non autorizzate.

Chiusura della sessione

Quando una sessione non è più necessaria, è importante chiuderla correttamente inviando una richiesta di chiusura della sessione.

logout_url = 'https://example.com/logout'
session.post(logout_url)
session.close()

Audit e registrazione dei log

Audit e registrazione dei log per la gestione delle sessioni consentono di rilevare attività sospette e rispondere rapidamente agli incidenti di sicurezza.

Seguendo queste migliori pratiche, puoi gestire le sessioni in modo sicuro ed efficiente.

Esempi pratici ed esercizi

Vediamo alcuni esempi di applicazione pratica dell’uso delle sessioni e dei cookie, seguiti da esercizi per approfondire la comprensione.

Esempio pratico: Login automatico e raccolta dati

Ecco un esempio di uno script che esegue automaticamente il login e raccoglie i dati. Lo script mantiene la sessione attiva e raccoglie i dati da una pagina specifica.

import requests
from bs4 import BeautifulSoup

# Creazione dell'oggetto sessione
session = requests.Session()

# Impostazione dei dati di login
login_url = 'https://example.com/login'
login_data = {'username': 'myusername', 'password': 'mypassword'}
session.post(login_url, data=login_data)

# Accedi alla pagina da cui raccogliere i dati
data_url = 'https://example.com/data'
response = session.get(data_url)

# Analizza l'HTML con BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
data = soup.find_all('div', class_='data-class')

# Visualizza i dati raccolti
for item in data:
    print(item.text)

Esercizi

Risolvi i seguenti esercizi per approfondire la tua comprensione delle sessioni e dei cookie.

Esercizio 1: Creazione di uno script di login automatico

  1. Crea uno script che esegua il login automatico su un sito web di tua scelta.
  2. Raccogli e visualizza informazioni da una pagina dopo il login.

Esercizio 2: Salvataggio e riutilizzo dei cookie

  1. Crea uno script che salvi i cookie dopo il login.
  2. Crea uno script che riutilizzi i cookie salvati per accedere a una pagina senza effettuare di nuovo il login.

Esercizio 3: Implementazione del timeout della sessione

  1. Imposta correttamente il timeout della sessione e crea uno script che provi a eseguire il login dopo un timeout.

Questi esercizi ti aiuteranno a sviluppare competenze pratiche nella gestione delle sessioni e dei cookie.

Conclusione

In questo articolo, abbiamo esplorato come gestire sessioni e cookie utilizzando la libreria requests di Python. Abbiamo imparato a creare oggetti sessione, impostare e mantenere i cookie, gestire le sessioni dopo il login e riutilizzare i cookie. Abbiamo anche esaminato le migliori pratiche per la gestione delle sessioni, e attraverso esempi pratici e esercizi, abbiamo approfondito l’importanza e le modalità di gestione delle sessioni nelle applicazioni web.

Gestendo correttamente sessioni e cookie, è possibile migliorare l’esperienza utente e la sicurezza delle applicazioni web. Utilizza queste conoscenze per costruire applicazioni web sicure ed efficienti.

Indice