Mi è capitato spesso di dover automatizzare alcuni processi, con i quali era necessario eseguire delle richieste verso siti non gestiti da me.
Generalmente queste richieste sono di tipo POST, bastano poche righe in Python e il gioco è fatto!
Come di consueto, vi ricordo che il mio ambiente di sviluppo è Linux (per la precisione Ubuntu 18.04.3) e come editor, in questi casi, utilizzo un semplicissimo vim.
Per poter funzionare questo semplice script, necessita di una libreria aggiuntiva, oltre a quelle presenti di base in Python, si tratta della libreria requests.
Procediamo con l’installazione della libreria requests.
Da terminale digitate:
redmarv@Frog:~$ pip install requests
A questo punto, il gestore di pacchetti per Python (pip) installerà la libreria richiesta e tutte le eventuali dipendenze.
Iniziamo a comporre il nostro piccolo script, quindi da terminale:
redmarv@Frog:~$ vim request.py
A questo punto si aprirà il nostro editor, dove potremo iniziare a scrivere il nostro codice (per chi non conoscesse l’utilizzo di vim, per iniziare ad inserire del testo, occorre premere il tasto “i” della tastiera, così entreremo nella modalità “insert”).
import requests
import sys
Con queste due stringhe importeremo le librerie richieste, nell’ordine:
- requests (quella installata precedentemente) che è la libreria necessaria ad effettuare la richiesta POST
- sys è la libreria che ci servirà a leggere un eventuale parametro che vorremo passare al nostro script in fase di esecuzione
In questo esempio, effettueremo una richiesta POST verso un sito, passando da riga di comando un parametro da inviare assieme alla richiesta stessa e salvando l’output ricevuto su un file di testo.
Proseguiamo:
f = open("result.txt", "a")
Apriamo il file “result.txt in modalità append (“a”) dopo di che proseguiamo nello script.
url = 'https://somesite.com/'
In questo modo imposteremo in una variabile, il link del sito verso il quale si vuole effettuare la richiesta.
if len(sys.argv) < 2:
print "Utilizzo: python request.py stringa_da_inviare"
sys.exit(1)
string_to_post = sys.argv[1]
In questa sezione controlliamo che durante il lancio dello script venga inserito il parametro da inviare assieme alla richiesta post (stringa_da_inviare) e se così non fosse, mostra il messaggio “Utilizzo: python request.py stringa_da_inviare” ed esce dallo script.
Altrimenti salva nella variabile post il parametro da inviare con la richiesta POST.
myobj = {'post_field_name': string_to_post}
x = requests.post(url, data = myobj)
Con queste due stringhe si crea prima di tutto un oggetto (myobj) che contiene il nome del campo da inviare via POST e la stringa da inviare.
E in fine si crea la richiesta POST.
result = x.text
result = result.encode('utf-8')
f.write(result)
f.close()
Con la prima stringa andremo a salvare in una variabile il testo che si ha in risposta alla richiesta POST (x.text).
Dopo di che si applica la codifica utf-8 al testo.
Con le ultime due stringhe si va a scrivere la risposta ricevuta dentro il nostro file di testo e in fine si chiude la scrittura sul file stesso.
Per comodità inserisco qui sotto lo script completo.
import requests
import sys
f = open("result.txt", "a")
url = 'https://somesite.com/'
if len(sys.argv) < 2:
print "Utilizzo: python request.py stringa_da_inviare"
sys.exit(1)
string_to_post = sys.argv[1]
myobj = {'post_field_name': string_to_post}
x = requests.post(url, data = myobj)
result = x.text
result = result.encode('utf-8')
f.write(result)
f.close()