Python requests è un’ap­prez­za­ta libreria che ti consente di inviare richieste HTTP e ve­ri­fi­ca­re le risposte. Sebbene .get() sia il metodo prin­ci­pa­le di questo modulo, sono di­spo­ni­bi­li molte altre opzioni.

Che cos’è Python requests?

Python requests è uno standard che ti consente di inviare richieste HTTP all’interno di questo lin­guag­gio di pro­gram­ma­zio­ne. La base è un’in­ter­fac­cia di programma chiara ed efficace, che rende par­ti­co­lar­men­te semplice l’in­te­gra­zio­ne di fun­zio­na­li­tà da parte di fornitori terzi. La libreria requests di Python offre vari strumenti che per­met­to­no di inviare richieste HTTP e ricevere le relative risposte. Anche se il modulo Python requests è am­pia­men­te uti­liz­za­to e altamente con­si­glia­bi­le, non fa parte dell’in­stal­la­zio­ne standard di Python.

Managed Nextcloud di IONOS Cloud
Lavora con il tuo team sul cloud
  • Massima sicurezza dei tuoi dati
  • Strumenti di col­la­bo­ra­zio­ne per lavorare in team
  • Ag­gior­na­men­ti au­to­ma­ti­ci

In­stal­la­zio­ne e avvio della libreria Python requests

Prima di in­stal­la­re Python requests ti con­si­glia­mo di creare una macchina virtuale, dove poter testare la libreria senza pre­oc­cu­pa­zio­ni. Per l’in­stal­la­zio­ne si utilizza pip. Il codice si presenta così:

$ python -m pip install requests
bash

Dopo aver com­ple­ta­to l’in­stal­la­zio­ne, per uti­liz­za­re la libreria è ne­ces­sa­rio questo codice:

import requests
python

Fun­zio­na­men­to, sintassi e metodi

Come altri strumenti simili, Python requests invia una richiesta HTTP, che poi riceve una risposta se la tra­smis­sio­ne ha esito positivo. Questa risposta è un oggetto che contiene tutte le in­for­ma­zio­ni im­por­tan­ti come contenuto, codifica e stato. La sintassi per tale richiesta è sempre simile alla seguente:

requests.methode(url, **kwargs)
python
N.B.

**kwargs sta a indicare i metodi opzionali che è possibile assegnare a metodi come headers, files o cookies.

La funzione che uti­liz­ze­rai più spesso è .get(), ma Python requests mette a tua di­spo­si­zio­ne anche altri metodi. Sono di­spo­ni­bi­li le seguenti funzioni:

  • .delete(url, **kwargs): utilizza .delete() per eliminare un’origine specifica
  • .get(url, parameter=None, **kwargs): con .get() puoi ri­chie­de­re in­for­ma­zio­ni da un server
  • .head(url, **kwargs): anche con .head() puoi ri­chie­de­re una risposta da un server, ma limitata all’in­te­sta­zio­ne
  • .patch(url, data=None, **kwargs): uti­liz­zan­do .patch() è possibile aumentare le pre­sta­zio­ni. Con questo metodo, soltanto le modifiche vengono inviate all’origine
  • .post(url, data=None, json=None, **kwargs): con .post() è possibile tra­smet­te­re a un server prin­ci­pal­men­te le in­for­ma­zio­ni su un modulo
  • .put(url, data=None, **kwargs): con .put() puoi mo­di­fi­ca­re un’origine già esistente e creare nuovi dati sul server
  • .request(method, url, **kwargs): .request() ti permette di inviare una richiesta all’URL uti­liz­zan­do un metodo specifico

Esempio per il metodo .get()

La struttura di .get() è molto chiara e rende Python requests una libreria pratica da usare. Tutto ciò che ti serve sono il metodo e l’URL a cui vuoi fare ri­fe­ri­men­to. Quest’ultimo viene scritto tra vir­go­let­te. Un codice del genere si presenta ad esempio così:

import requests
requests.get("https://esempio.com")
python

Riceverai quindi una risposta dal tuo server di de­sti­na­zio­ne. Per capire meglio il fun­zio­na­men­to, puoi anche ri­chie­der­ne la vi­sua­liz­za­zio­ne in una variabile. Per il nostro esempio, il codice si pre­sen­te­reb­be così:

import requests
response = requests.get("https://esempio.com")
python

Richiesta di codici di stato

La risposta più semplice che puoi ricevere a una richiesta è un codice di stato HTTP. Esso ti permette di capire se la tua richiesta ha avuto successo o meno. Il codice di stato è composto da tre cifre. Esistono numerose varianti che for­ni­sco­no in­for­ma­zio­ni sullo stato di avan­za­men­to della tua richiesta. Le categorie prin­ci­pa­li sono le seguenti:

  • 1XX: contiene ulteriori in­for­ma­zio­ni
  • 2XX: certifica che una richiesta è andata a buon fine
  • 3XX: ti informa se la tua richiesta è stata rein­di­riz­za­ta
  • 4XX: segnala un errore lato client
  • 5XX: segnala un errore lato server

Tra i codici di stato più noti vi sono “200 – OK” (per una richiesta andata a buon fine) e “404 – Not Found” (se i dati richiesti non sono stati trovati sul server).

Dopo aver inviato la tua richiesta tramite Python requests, puoi in­ter­ro­ga­re lo stato con .status_code. A tal fine utilizza il codice seguente:

response.status_code
python

Se la richiesta ha avuto successo, ricevi questo risultato:

200
python

Per maggiore chiarezza è utile anche il codice seguente:

if response.status_code == 200:
	print("La richiesta è andata a buon fine.")
elif response.status_code == 404:
	print("La richiesta non è andata a buon fine.")
python

Vi­sua­liz­za­zio­ne dell’in­te­sta­zio­ne con Python requests

Molte in­for­ma­zio­ni utili sono contenute nell’in­te­sta­zio­ne di una risposta HTTP. Qui trovi tra l’altro il tipo di dati inviati, un limite di tempo per la me­mo­riz­za­zio­ne tem­po­ra­nea e altre in­for­ma­zio­ni. Con la libreria Python requests puoi anche vi­sua­liz­za­re fa­cil­men­te l’in­te­sta­zio­ne. A tal fine, esegui prima la funzione .get() e quindi .headers:

import requests
response = requests.get("https://esempio.com")
response.headers
python

Come risultato ottieni un oggetto con­te­nen­te i valori dell’in­te­sta­zio­ne. Inoltre, puoi in­ter­ro­ga­re tali valori sin­go­lar­men­te ag­giun­gen­do spe­ci­fi­ca­zio­ni al comando. Ad esempio, se desideri avere ulteriori in­for­ma­zio­ni sul tipo di dati, il codice da inserire è questo:

response.headers["content-type"]
python

Accesso al payload

Il pacchetto di dati inviato tra il server e il client è noto anche come “payload”. Si trova nel corpo, o body, della risposta. Uti­liz­zan­do response puoi accedere alle in­for­ma­zio­ni al suo interno. Per ottenere una rap­pre­sen­ta­zio­ne in byte, utilizza questa istru­zio­ne:

import requests
response = requests.get("https://esempio.com")
response.content
type(response.content)
python

Se desideri con­ver­ti­re in una stringa le in­for­ma­zio­ni così ottenute, utilizza questo codice:

response.text
type(response.text)
python

Python requests rimuove la crit­to­gra­fia dall’in­te­sta­zio­ne. In al­ter­na­ti­va puoi dire al sistema di uti­liz­za­re un metodo diverso. Un esempio è rap­pre­sen­ta­to da questo codice:

response.encoding = "utf-8"
response.text
python

Verifica dello stato di avan­za­men­to

Quando invii una richiesta, Python requests la prepara per evitare spia­ce­vo­li errori. Tra le altre cose, viene anche con­trol­la­ta l’in­te­sta­zio­ne. Puoi ve­ri­fi­ca­re l’avan­za­men­to di questo metodo per mezzo della funzione .request. A tal fine utilizza il codice seguente:

import requests
response = requests.post("https://esempio.com", json={"key": "value"})
print(response.request.headers["content-type"])
print(response.request.url)
print(response.request.body)
python

In questo modo ottieni in­for­ma­zio­ni su payload, in­te­sta­zio­ne, URL e molto altro ancora.

Verifica dell’au­ten­ti­ci­tà con i moduli Pythonrequests

Il parametro auth è uti­liz­za­to in Python requests per inviare un’au­ten­ti­ca­zio­ne al server. Quest’ultimo può quindi ef­fet­tua­re una verifica dell’au­ten­ti­ci­tà e con­trol­la­re con chi sta in­te­ra­gen­do ef­fet­ti­va­men­te. Per uti­liz­za­re questa verifica, usa un codice come questo:

import requests
from requests.auth import HTTPBasicAuth
response = requests.get("https://il_tuo_sito.com/basic-auth/user/passwd", 
	auth=HTTPBasicAuth("user", "passwd"))
print(response.status_code)
print(response.request.headers["Authorization"])
python

Utilizzo di un cer­ti­fi­ca­to SSL

In generale, l’uso di un cer­ti­fi­ca­to SSL è utile per prevenire le perdite di dati e le in­tro­mis­sio­ni in­de­si­de­ra­te. Python requests offre questa opzione come im­po­sta­zio­ne pre­de­fi­ni­ta. Tuttavia, se desideri in­ter­rom­pe­re la verifica reciproca per una richiesta, puoi di­sat­ti­va­re SSL con questo codice:

import requests
requests.get("https://esempio.com", verify=False)
python

Tuttavia, riceverai un chiaro messaggio di av­ver­ti­men­to.

Ini­zia­liz­za­zio­ne di un timeout con Python requests

Tra le varie pos­si­bi­li­tà, Python requests ti permette anche di limitare il tempo massimo per una risposta. Per im­po­sta­zio­ne pre­de­fi­ni­ta, il client attende una risposta senza alcuna li­mi­ta­zio­ne. Se la risposta non arriva, le richieste possono ac­cu­mu­lar­si e le pre­sta­zio­ni ne risentono. Per prevenire questo problema puoi uti­liz­za­re il parametro timeout. Con il codice seguente in­di­chia­mo a Python requests di in­ter­rom­pe­re la richiesta dopo due secondi:

requests.get("https://esempio.com", timeout=2)
python
Consiglio

Effettua il de­ploy­ment del tuo sito web o della tua app di­ret­ta­men­te tramite GitHub: con Deploy Now di IONOS hai a tua di­spo­si­zio­ne la soluzione ottimale sia per le ap­pli­ca­zio­ni a pagina singola che per i siti web statici. Scegli il piano più adatto alle tue esigenze e ap­pro­fit­ta di una con­fi­gu­ra­zio­ne più rapida, flussi di lavoro ot­ti­miz­za­ti e pro­get­ta­zio­ne sicura.

Vai al menu prin­ci­pa­le