Martedì, 11 Dicembre 2018 12:11

HTTP, REST, cURL (da completare)

Scritto da

Nell’ottica dello studio intrapreso sui servizi del livello “applicazione” della pila TCP/IP (o se il lettore preferisce dei livelli 4,5,6 rispettivamente “sessione”, “presentazione”, “applicazione” della pila ISO/OSI), vogliamo indagare un po’ più approfonditamente quello che accade dietro il protocollo HTTP e HTTPS, la versione sicura su cui torneremo parlando di sicurezza e crittografia.

Questo post riassume alcuni concetti  semplici trattati a lezione.  Li potete confrontare ed approfondire sul libro di testo e internet.

URL -> acronimo di Unified Request Locator, che detto così sembra un concetto complesso, ma cui in realtà siamo quotidianamente abituati. Sono gli indirizzi che mettiamo solitamente nella barra del nostro browser per raggiungere un sito web.

URI -> Uniform Resource Identifier, è una sequenza di caratteri che identifica universalmente ed univocamente una risorsa. URL è uno specifico tipo di URI, ovvero una risorsa. Uri è più una sintassi generica. Nei nostri esempi facciamo sempre riferimento a URL ma non stupitevi di trovare scritto URI.

Ora nel terzo anno abbiamo imparato a prendere confidenza con le pagine html. Queste sono risorse molto semplici che possiamo trovare online e si dicono, per lo più, statiche, ovvero a meno di frammenti di codice javascript che possono interagire lato client con il browser e l’utente, non c’è una vera capacità di calcolo lato server. Sono le classiche pagine che da browser potremmo raggiungere con un classico http://www.miosito.it/pagina.html Formalmente, sono pagine destinate a scomparire data la tecnologia semplicistica dietro. Più complesse sono le pagine PHP ma anche le pagine JSP in Java o Py in Python create con tecnologie simili e che richiedono una capacità computazionale da parte del server che fa girare tali pagine/script e restituisce al nostro browser una pagina html precompilata con i risultati dei calcoli. Con le pagine php possiamo inviare dei parametri al server, cosa che non potevamo fare con le paginette html. Es. http://www.miosito.it/index.php?utente=pippo&articolo=1 Questo potrebbe essere un esempio di url parametrico che chiede al sito miosito di visualizzare l’articolo 1 pubblicato dall’utente pippo. Va da se che i lprogettista deve scegliere le varibili e i parametri che gli script PHP si scambiano per poter poi utilizzare tali valori nel codice PHP che magari interagisce con un DB dove prelevare questo articolo. Il terzo tipo di URL si è diffuso solo di recente e forse siamo meno abituati. Riprendiamo lo stesso scritto in PHP ma così: http://www.miosito.it/index/utente/pippo/articolo/1 Se controllate, i parametri sono gli stessi, ma sono scritti come una specie di catena, di susseguirsi di directory sembra quasi e soprattutto non compare nessuna estensione html o php. Dietro questo URL infatti c’è un vero e proprio servizio web di ultima generazione. Poco importa se la tecnologia alla base usa php, python o java, o addirittura se dietro c’è una pagina web, una qualche app mobile o la restituzione di una semplice risorsa come un file XML o una stringa JSON. Questo ultimo è proprio un classico esempio di architettura REST, un insieme di regole semplici per eseguire però applicazioni anche complesse. L'architettura REST si basa su HTTP; il funzionamento prevede una struttura degli URL ben definita (atta a identificare univocamente una risorsa o un insieme di risorse, ad esempio l’articolo 1 dell’utente pippo dell’es. precedente) e l'utilizzo dei verbi HTTP specifici per il recupero di informazioni GET e per la modifica POST, PUT, DELETE. Ce ne sono anche altri di comandi/verbi ma di minor interesse per noi, ma il lettore comprende la semplicità del protocollo http. 

Con REST tutto è una risorsa in pratica, dietro ci son o ancora magari le pagine php o java o python ma prendono l'url scritto con questa forma e lo interpretano per restituire poi una pagina html con la risposta grafica che ci attendiamo o, come dobbiamo abituarci a pensare, ci restituiscono magari un file XML o JSON che di grafico non hanno nulla, ma contengono delle informazioni grezze che possono essere utilizzate e graficate da altri siti web, altri software sul web o su pc o smartphone.  Un esempio: avete una app sul cellulare che quando l’avviate fa un download di aggiornamento, ad es. l'app che vi dice gli ultimi terremoti. L'app è già sul vostro telefono, ma quando l’avviate si collega ad un servizio web che gli restituisce un file xml dove dentro ci sono i vari dati con cui aggiorna la grafica sul vostro schermo. Il server non fa grafica, invia solo dati, la grafica la fa la vostra app sul vostro telefonino. Questa è una logica molto diffusa dei web service REST che tendono ad assumere la formula MVC che divide dati, parte di calcolo, parte di grafica in tre rami distinti. Questo è particolarmente comodo per applicazioni scalabili: oggi voglio usare un database piuttosto che un altro? Domani voglio una interfaccia grafica web invece di quella che ho oggi per app/smartphone? Oggi ho un sito php ma domani o voglio riscrivere o modificare o aggiungere nello stesso linguaggio o altro? Cambio magari uno dei tre componenti ma gli altri due rimango gli stessi, senza dover far lavoro in più. E guardate bene: se abbiamo un url del terzo tipo, sotto ci può essere quello che mi pare a me progettista, se invece ho una pagina .php o .html, la cosa non è così scontata!

 

cURL

Quando sviluppiamo un’applicazione web, un web service, qualunque sia la finalità come già detto, che sia una pagina grafica, una app o una semplice risorsa XML, bisogna sottoporla a test. Non pensate ai siti semplici che si fanno come esempio nelle nostre lezioni, poche pagine, pochi calcoli, poca complessità. I siti che ci sono sul web contengono elementi di complessità elevati, basti pensare a youtube, facebook ed altri social. Lo strumento che proponiamo di vedere è cURL che potete scaricare qui. E’ un software da riga di comando per Shell/DOS che interagisce con svariati protocolli: http ma anche FTP, TELNET ed altri. Possiamo effettuare con cURL molte operazioni:

  1. Recuperare una pagina web e il suo contenuto
  2. Inviare in modo fittizio i dati di una form
  3. Autenticarci in modo fittizio in area riservata
  4. Connetterci in modo generico ad un web service
  5. Ecc…

Il primo strumento lo abbiamo visto anche in Python: reperire il contenuto di una pagina web ci permette di analizzarne il contenuto per svariati fini. Ad esempio: come crede che faccia google a mettere i banner di pubblicità su misura col l’argomento del sito che state visitando? LA seconda e terza funzione sono ottime per il test ma contengono una insidia molto rilevante. Sapete immaginare quale? Se non ci arrivate subito, cURL non solo può essere utilizzato da riga di comando, in modo un po’ scomodo e limitato a pochi comandi, ma può essere inserito come libreria all'interno dei programmini c/c++, java, python o php. Immaginate ora cosa posso fare se con un python ad esempio provo un ciclo infinito finché azzecco la password di una form di login…

Scarichiamo dalla pagina download la versione X64 dal link https://curl.haxx.se/windows/, scompattiamolo sul nostro Desktop. Consiglio di rinominare la cartella estratta in un più semplice “curl”. Apriamo una shell: basta cliccare sull'icona di windows e digitare a vuoto da tastiera il classico “cmd”. Ora spostiamoci nella cartella di lavoro con “cd desktop/curl/bin”. Ora siamo pronto a testare il nostro cURL. Se non volete o non potete scaricare il file o semplicemente siete pigri potete usare una versione online al sito https://onlinecurl.com/ .

  1. Lettura di una semplice pagina web

        curl http://www.iisalessandrini.it

          oppure stando attenti a scrivere correttamente http/https

           curl https://www.goldbet.it

  1. A schermo il comando precedente è un po’ scomodo da visionare, allora reindirizziamo la risposta ad una file più leggibile che creiamo nella stessa cartella bin del nostro eseguibile

          curl https://www.goldbet.it > risultato.html

      3. Proviamo ad eseguire i comandi HTTP. Non avendo un sito nostro su cui sperimentare, ne prendiamo un paio che sono fatti su misura per questo scopo. Diamo gli un'occhiata prima dalla pagina https://jsonplaceholder.typicode.com/ e http://httpbin.org 

 

Letto 1019 volte
Prof. Alfredo Centinaro

Docente di "Scienze e tecnologie informatiche", "Tecnologie e progettazione di sistemi informatici", "Sistemi e Reti" presso IIS Alessandrini-Marino (Teramo), consulente e sviluppatore web. Ha collaborato per anni come sviluppatore presso MHT - Treviso, assistente Sistemi ed elaborazione dell'informazione in UniTE Corso di laurea in Scienze del turismo culturale, tutor presso Telecom Italia Learning Services (L'Aquila)

Joomla SEF URLs by Artio