Libreria
Web pro
Web PRO (client HTTP comodo e server web con rotte).
Funzioni 8
aggiungi_rottaavvia_servercomponi_rispostacrea_server_webferma_serverinvia_datiinvia_jsonottieni_pagina
ottieni_pagina(indirizzo, parametri = nulla, intestazioni = nulla, tempo_massimo = 15)#
Chiede una pagina o dei dati (GET).
Restituisce una risposta_web da leggere con risposta.stato, risposta.testo, risposta.json_risposta, risposta.riuscita. Un codice di errore (404, 500...) NON ferma il programma. parametri finisce nell'indirizzo (?a=1&b=2).
variabile r = ottieni_pagina("https://api.esempio.it/cerca", parametri = {"q": "Dante"})invia_json(indirizzo, dati, intestazioni = nulla, metodo = "POST", tempo_massimo = 15)#
Invia dati come JSON.
dati (un dizionario o una lista) viene inviato come JSON. Con metodo scegli "POST" (predefinito), "PUT", "PATCH" o "DELETE". Restituisce una risposta_web.
variabile voti = [7, 8, 6, 9] # valore di provavariabile r = invia_json("https://api.esempio.it/voti", {"voto": 30})invia_dati(indirizzo, campi, intestazioni = nulla, metodo = "POST", tempo_massimo = 15)#
Invia un modulo web.
campi è un dizionario inviato come un modulo compilato nel browser (application/x-www-form-urlencoded), non come JSON. Restituisce una risposta_web.
invia_dati("https://sito.esempio.it/accesso", {"utente": "aldo", "parola": "..."})componi_risposta(contenuto = nulla, stato = 200, tipo = nulla, intestazioni = nulla)#
Una risposta su misura.
Si restituisce dalla funzione di una rotta quando vuoi decidere lo stato (per
funzione gestisci(r) restituisci componi_risposta({"errore": "non trovato"}, stato = 404) finecrea_server_web(porta = 8080)#
Crea un server web su questo computer, con rotte.
Poi aggiungi le rotte con aggiungi_rotta(server, percorso, funzione) e accendi con avvia_server(server). Ascolta solo su 127.0.0.1 (questo computer). porta = 0 sceglie una porta libera (la leggi da server.indirizzo).
variabile server = crea_server_web(8080)aggiungi_rotta(server, percorso, funzione, metodo = "GET")#
Collega una funzione a un percorso.
La funzione riceve la richiesta (metodo, percorso, parametri, corpo, json, intestazioni, variabili, cliente) e restituisce un testo, un dizionario/lista (JSON), un numero oppure componi_risposta(...). Il percorso può avere parti variabili ("/utenti/:id" -> richiesta["variabili"]["id"]) e una parte finale jolly ("/file/*").
aggiungi_rotta(server, "/ciao", funzione (richiesta) restituisci "Ciao!" fine)avvia_server(server, richieste = nulla, secondi = nulla)#
Accende il server e risponde alle richieste.
Resta in ascolto ed esegue la funzione della rotta che combacia con ogni richiesta. Si ferma dopo richieste richieste, dopo secondi secondi, con ferma_server(server) (anche dentro una rotta) o con Ctrl+C. Restituisce quante richieste ha servito. L'indirizzo è in server.indirizzo.
avvia_server(server, richieste = 10)ferma_server(server)#
Spegne il server.
Si può chiamare anche dentro la funzione di una rotta: il server finisce di rispondere a quella richiesta e poi avvia_server termina.
Oggetto «risposta_web»
La risposta a una richiesta web, da leggere con proprietà chiare.
La ottieni da ottieni_pagina, invia_json e invia_dati. Uno stato di errore (404, 500...) NON ferma il programma: controlla riuscita.
| Proprietà | Significato |
|---|---|
indirizzo | risposta.indirizzo: l'indirizzo finale (dopo eventuali reindirizzamenti). |
intestazioni | risposta.intestazioni: le intestazioni della risposta (un dizionario). |
json_risposta | risposta.json_risposta: i dati JSON già trasformati in valori Leo (o nulla). |
messaggio | risposta.messaggio: il nome breve dello stato ("Non trovato", "OK"...). |
riuscita | risposta.riuscita: vero se lo stato è tra 200 e 299. |
spiegazione | risposta.spiegazione: una frase che spiega lo stato. |
stato | risposta.stato: il codice HTTP (200 = andata bene, 404 = non trovato...). |
testo | risposta.testo: il contenuto come testo (l'HTML, il testo, il JSON grezzo). |
tipo | risposta.tipo: il tipo di contenuto (per esempio "application/json"). |
.solleva_se_errore()#
Ferma il programma con un errore se lo stato non è 2xx.
Comodo quando vuoi che un 404 o un 500 diventi subito un errore invece di controllare risposta.riuscita. Se va tutto bene restituisce la risposta stessa, così puoi concatenare: variabile r = ottieni_pagina(u).solleva_se_errore().
Oggetto «server_web_pro»
Un piccolo server web su questo computer, con rotte per percorso e metodo.
Le richieste arrivano su un thread secondario; la funzione di ogni rotta la esegue però avvia_server sul thread del programma (il codice Leo gira sempre in un solo thread).
| Proprietà | Significato |
|---|---|
attivo | server.attivo: vero se il server è acceso. |
indirizzo | server.indirizzo: l'indirizzo da aprire nel browser (vuoto se spento). |
porta | server.porta: la porta su cui ascolta (quella vera, anche se hai chiesto 0). |
richieste_servite | server.richieste_servite: quante richieste ha servito finora. |
rotte | server.rotte: l'elenco delle rotte come testi ("GET /utenti/:id"). |