Con 4D v19R6, abbiamo introdotto un nuovo modo di eseguire le richieste HTTP: Le classi HTTP. All’epoca, alcune funzionalità delle classi HTTP non erano ancora definitive, poiché volevamo adattarle alla nuova sintassi. Ora è stato fatto! Nella v19R7, le funzionalità delle risposte compresse, delle risposte a pezzi e dei reindirizzamenti sono ora complete.
Come bonus, abbiamo anche aggiunto un nuovo modo per registrare le richieste HTTP. E poiché è utile a tutti, questo nuovo logging è disponibile sia per le nuove classi HTTP che per la sintassi legacy.
Prima di tutto, vorrei parlare delle funzionalità delle classi HTTP. Abbiamo riportato e adattato il funzionamento della sintassi legacy per adattarlo alla nuova sintassi. Abbiamo incluso la maggior parte delle sue caratteristiche, ovvero HTTP, proxy e autenticazione del server, reindirizzamenti, risposte in chunked e risposte compresse. Abbiamo anche aggiunto alcune funzionalità, come la possibilità di annullare una richiesta o la nuova registrazione delle richieste dei client HTTP (ne parleremo nel prossimo paragrafo). L’ultima funzionalità che dobbiamo segnalare nella nuova sintassi è la persistenza della connessione attraverso un keep-alive: arriverà presto all’interno di una caratteristica molto più importante… che vi spiegherò in un altro post del blog. Restate sintonizzati!
Parliamo ora del nuovo logging del client HTTP disponibile nella v19R7.
Attivare la registrazione del client HTTP è estremamente semplice; basta aggiungere questa riga al codice:
HTTP SET OPTION(HTTP client log; HTTP enable log with all body parts)
E questo è tutto! Tutte le richieste e le risposte saranno registrate nel file 4DHTTPClientLog_x.txt nella cartella Logs con lo stesso formato dei log del server.
Naturalmente, è possibile registrare interamente le richieste e le risposte, ma se non si vuole che i file di log siano ingombrati da lunghe risposte, è possibile rimuovere i corpi delle risposte e persino i corpi delle richieste. La sintassi è molto simile a quella dell’attivazione dei log del server, quindi non ci si sorprenderà.
Infine, ecco un esempio di una richiesta e della relativa risposta (senza il corpo) registrate nel file di log del client HTTP:
# REQUEST # SequenceID: 7 # ConnectionID: DDF30D20070B0848B455971A0D627ED6 # LocalIP: 192.168.18.11:52097 # PeerIP: 192.168.4.7:3128 # TimeStamp: -1607148967 GET http://www.4d.com:80/ HTTP/1.1 Accept-Encoding: gzip, deflate Connection: Close Content-Length: 4 Content-Type: text/plain; charset=UTF-8 Date: Fri, 23 Sep 2022 09:30:58 GMT Host: www.google.com User-Agent: 4D_HTTP_Client/0. [Body Size: 4] # RESPONSE # SequenceID: 6 # ConnectionID: 8EA22B111F16B04B92966DEFAA22704F # LocalIP: 192.168.18.11:52090 # PeerIP: 192.168.4.7:3128 # TimeStamp: -1607191491 # ElapsedTimeInMs: 154 HTTP/1.1 200 OK Cache-Control: private, max-age=0 Connection: close Content-Encoding: gzip Content-Length: 6185 Content-Type: text/html; charset=ISO-8859-1 Date: Fri, 23 Sep 2022 09:30:16 GMT Expires: -1 Via: 1.1 proxy-squid (squid/3.5.27) [Body Size: 6185]
Se avete commenti su questa nuova funzione, non esitate a condividerli con noi sul forum ufficiale di 4D.