logo

Richieste GET e POST utilizzando Python

Questo post discute due metodi di richiesta HTTP (Hypertext Transfer Protocol) richieste GET e POST in Python e la loro implementazione in Python. 

Cos'è l'HTTP?  

HTTP è un insieme di protocolli progettati per consentire la comunicazione tra client e server. Funziona come un protocollo di richiesta-risposta tra un client e un server. Un browser web può essere il client e un'applicazione su un computer che ospita un sito web può essere il server. Quindi per richiedere una risposta al server ci sono principalmente due metodi:

  1. OTTENERE : Per richiedere dati dal server.
  2. INVIARE : Per inviare i dati da elaborare al server.

Ecco un semplice diagramma che spiega il concetto di base dei metodi GET e POST.



Richieste GET e POST utilizzando Python' src='//techcodeview.com/img/python/28/get-and-post-requests-using-python.webp' title= 

 Ora per effettuare richieste HTTP Pitone possiamo utilizzare diverse librerie HTTP come:

La più elegante e semplice tra le librerie sopra elencate è Requests. Utilizzeremo la libreria delle richieste in questo articolo. Per scaricare e installare la libreria Requests utilizzare il seguente comando:

pip install requests

Effettuare una richiesta Ottieni

L'esempio precedente trova la latitudine, la longitudine e l'indirizzo formattato di una determinata posizione inviando una richiesta GET all'API di Google Maps. UN API (Application Programming Interface) consente di accedere in modo limitato alle funzionalità interne di un programma. E nella maggior parte dei casi i dati forniti sono presenti JSON (notazione oggetto JavaScript) format (che è implementato come oggetti dizionario in Python!).

Python
# importing the requests library import requests # api-endpoint URL = 'http://maps.googleapis.com/maps/api/geocode/json' # location given here location = 'delhi technological university' # defining a params dict for the parameters to be sent to the API PARAMS = {'address':location} # sending get request and saving the response as response object r = requests.get(url = URL params = PARAMS) # extracting data in json format data = r.json() # extracting latitude longitude and formatted address # of the first matching location latitude = data['results'][0]['geometry']['location']['lat'] longitude = data['results'][0]['geometry']['location']['lng'] formatted_address = data['results'][0]['formatted_address'] # printing the output print('Latitude:%snLongitude:%snFormatted Address:%s' %(latitude longitudeformatted_address)) 

Produzione:

Richieste GET e POST utilizzando Python

Punti importanti da dedurre:

PARAMS = {'address':location}

L'URL per una richiesta GET generalmente porta con sé alcuni parametri. Per le richieste i parametri della libreria possono essere definiti come un dizionario. Questi parametri vengono successivamente analizzati e aggiunti all'URL di base o all'endpoint API. Per capire il ruolo del parametro prova a stampare r.url dopo la creazione dell'oggetto risposta. Vedrai qualcosa del genere:

http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university

Questo è l'URL effettivo su cui viene effettuata la richiesta GET

r = requests.get(url = URL params = PARAMS)

Qui creiamo un oggetto di risposta "r" che memorizzerà la richiesta-risposta. Usiamo il metodo request.get() poiché stiamo inviando una richiesta GET. I due argomenti che passiamo sono URL e dizionario dei parametri.

data = r.json()

Ora per recuperare i dati dall'oggetto risposta dobbiamo convertire il contenuto grezzo della risposta in una struttura dati di tipo JSON. Ciò si ottiene utilizzando il metodo json(). Infine estraiamo le informazioni richieste analizzando l'oggetto di tipo JSON.

Effettuare una richiesta POST

Questo esempio spiega come incollare il tuo file codice_sorgente A pastebin.com inviando una richiesta POST all'API PASTEBIN. Prima di tutto dovrai generare una chiave API tramite iscrivendoti qui e quindi accedere al tuo Chiave API qui.  

Python
# importing the requests library import requests # defining the api-endpoint API_ENDPOINT = 'https://pastebin.com/api/api_post.php' # your API key here API_KEY = 'XXXXXXXXXXXXXXXXX' # your source code here source_code = ''' print('Hello world!') a = 1 b = 2 print(a + b) ''' # data to be sent to api data = {'api_dev_key': API_KEY 'api_option': 'paste' 'api_paste_code': source_code 'api_paste_format': 'python'} # sending post request and saving response as response object r = requests.post(url=API_ENDPOINT data=data) # extracting response text pastebin_url = r.text print('The pastebin URL is:%s' % pastebin_url) 

Caratteristiche importanti di questo codice:

data = {'api_dev_key':API_KEY  
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}

Anche in questo caso dovremo passare alcuni dati al server API. Archiviamo questi dati come dizionario.

r = requests.post(url = API_ENDPOINT data = data)

Qui creiamo un oggetto di risposta "r" che memorizzerà la richiesta-risposta. Usiamo il metodo request.post() poiché stiamo inviando una richiesta POST. I due argomenti che passiamo sono l'URL e il dizionario dei dati.

pastebin_url = r.text

In risposta il server elabora i dati che gli vengono inviati e invia il pastebin_URL del tuo codice_sorgente a cui è possibile accedere semplicemente tramite r.testo.

richieste.post Il metodo potrebbe essere utilizzato per molte altre attività, come compilare e inviare moduli Web pubblicati sulla sequenza temporale di FB utilizzando l'API Graph di Facebook, ecc. 

Ecco alcuni punti importanti su cui riflettere:

  • Quando il metodo è GET, tutti i dati del modulo vengono codificati nell'URL e aggiunti al file azione URL come parametri della stringa di query. Con il modulo POST i dati vengono visualizzati all'interno del file corpo del messaggio della richiesta HTTP.
  • Nel metodo GET i dati dei parametri sono limitati a ciò che possiamo inserire nella riga di richiesta (URL). È più sicuro utilizzare meno di 2K di parametri, alcuni server gestiscono fino a 64K. Nessun problema di questo tipo nel metodo POST poiché inviamo i dati nel corpo del messaggio della richiesta HTTP e non l'URL.
  • Sono consentiti solo caratteri ASCII per l'invio dei dati nel metodo GET. Non esiste tale restrizione nel metodo POST.
  • GET è meno sicuro rispetto a POST perché i dati inviati fanno parte dell'URL. Pertanto il metodo GET non deve essere utilizzato quando si inviano password o altre informazioni sensibili.
Crea quiz