CodeGym /Corsi /Python SELF IT /Utilizzare HttpClient

Utilizzare HttpClient

Python SELF IT
Livello 23 , Lezione 4
Disponibile

5.1 Introduzione a HttpClient

In Python, come in molti linguaggi di programmazione, c'è un HttpClient standard. In Python si chiama http.client e permette di eseguire richieste HTTP a basso livello e lavorare con le risposte HTTP. Permette di creare connessioni a server HTTP e interagire con essi.

Un modulo a basso livello come http.client offre un controllo più dettagliato sulle operazioni HTTP, ma richiede più codice per eseguire i compiti. Al contrario, moduli ad alto livello come requests, offrono un'interfaccia più semplice nascondendo molti dettagli di implementazione.

Funzionalità principali di http.client

Il modulo http.client offre le seguenti principali funzionalità:

  • Creazione di connessioni HTTP.
  • Invio di richieste HTTP.
  • Lettura di risposte HTTP.
  • Gestione di header e body delle richieste e risposte.

A differenza del modulo requests, il modulo http.client è più a basso livello e mette molta attenzione ai dettagli del funzionamento della richiesta http.

Classi e metodi principali di http.client

Classe/Metodo Descrizione
HTTPConnection Creazione di una connessione HTTP.
HTTPSConnection Creazione di una connessione HTTPS.
request(method, url, ...) Invio di una richiesta HTTP.
getresponse() Ottenere la risposta di una richiesta.
response.status Codice di stato della risposta.
response.reason Descrizione testuale dello stato della risposta.
response.read() Lettura dei dati della risposta.
response.getheaders() Ottenere tutti gli header della risposta.
response.getheader(name) Ottenere il valore di un header specifico.

Di seguito esamineremo alcuni di essi in dettaglio.

5.2 Esecuzione di una GET request

Per eseguire richieste usando la libreria http.client, devi seguire questo ordine di azioni:


Stabilire una connessione
Inviare una richiesta
Ricevere una risposta
Chiudere la connessione

È importante notare che chiudere la connessione dopo l'uso è necessario per liberare risorse e prevenire perdite di memoria. Questo è particolarmente importante quando si lavora con un gran numero di richieste o in applicazioni a lunga durata.

Esempio di utilizzo di HTTPConnection per una richiesta HTTP normale:


import http.client

# Creazione di una connessione HTTP
conn = http.client.HTTPConnection("example.com")
            
# Invio di una richiesta GET
conn.request("GET", "/")
            
# Ottenere la risposta
response = conn.getresponse()
print(response.status, response.reason)
            
# Chiusura della connessione
conn.close()
        

Esempio di utilizzo di HTTPSConnection:


import http.client

# Creazione della connessione
conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
# Invio di una richiesta GET
conn.request("GET", "/posts/1")
            
# Ottenere la risposta
response = conn.getresponse()
print(response.status, response.reason)
            
# Lettura e decodifica dei dati della risposta
data = response.read().decode('utf-8')
print(data)
            
# Ottenere tutti gli header della risposta
headers = response.getheaders()
for header in headers:
    print(f"{header[0]}: {header[1]}")
            
# Chiusura della connessione
conn.close()
        

Un po' più lungo rispetto all'uso di requests, non è vero?

5.3 Esecuzione di una POST request

Una POST request utilizzando http.client viene eseguita in modo molto simile a una GET request, solo che i dati devono essere confezionati in una stringa json manualmente, e bisogna specificare manualmente il tipo di dati trasmessi – aggiungere un header Content-Type.

Esempio:


import http.client
import json

# Invio della richiesta POST
conn.request("POST", "/posts", body=payload, headers=headers)
        

Come body bisogna passare un oggetto json, serializzato in una stringa, e come headers — un dizionario che contiene informazioni sul tipo di dati.

Possono apparire, ad esempio, così:


# Dati da inviare
payload = json.dumps({
    "title": "foo",
    "body": "bar",
    "userId": 1
})
            
# Headers – tipo di contenuto trasmesso
headers = {
    'Content-Type': 'application/json'
}
        

Allora il codice completo della POST request apparirà così:


import http.client
import json

# Dati da inviare
payload = json.dumps({
    "title": "foo",
    "body": "bar",
    "userId": 1
})
            
# Headers
headers = {
    'Content-Type': 'application/json'
}
            
# Creazione della connessione
conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
# Invio della richiesta POST
conn.request("POST", "/posts", body=payload, headers=headers)
            
# Ottenere la risposta
response = conn.getresponse()
print(response.status, response.reason)
            
# Lettura e decodifica dei dati della risposta
data = response.read().decode('utf-8')
print(data)
            
# Chiusura della connessione
conn.close()
        

5.4 Gestione degli errori durante l'esecuzione delle richieste

Penso che sarà utile fornire un esempio di gestione degli errori, dato che è diverso dal comportamento di requests. Nel modulo http.client un'eccezione viene sollevata automaticamente, se ci sono stati problemi con la connessione o altri errori HTTP.

Esempio:


import http.client

try:
    # Creazione della connessione
    conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
    # Invio di una richiesta GET
    conn.request("GET", "/posts/1")
            
    # Ottenere la risposta
    response = conn.getresponse()
    print(response.status, response.reason)
            
    # Lettura e decodifica dei dati della risposta
    data = response.read().decode('utf-8')
    print(data)
            
except http.client.HTTPException as e:
    print("HTTP error occurred:", e)
except Exception as e:
    print("An error occurred:", e)
finally:
    # Chiusura della connessione
    conn.close()
        

Che dire? Usare il modulo requests è sicuramente più semplice. Ma! Molti moduli e framework usano sotto il cofano proprio il http.client a basso livello. Devi sapere come lavorarci, così puoi configurare correttamente il loro funzionamento.

1
Sondaggio/quiz
Serializzazione, livello 23, lezione 4
Non disponibile
Serializzazione
Serializzazione
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION