Ultimi miglioramenti del client HTTP

Tradotto automaticamente da Deepl

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.

Nicolas Brachfogel
- Proprietario del prodotto e sviluppatore senior - Nicolas Brachfogel è entrato in 4D nel 2017 come Senior Developer (4D Server e networking). In qualità di Product Owner per gestire il rilascio di Apple Silicon, si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali, nonché di assicurarsi che le implementazioni delle funzionalità soddisfino le esigenze dei clienti. Diplomato all'Institut Supérieur d'Informatique Appliquée (INSIA), Nicolas ha iniziato la sua carriera come sviluppatore di software nel 2001. Dopo diversi anni di codifica in Java e C++, si è specializzato nello sviluppo di client-server per aziende di videogiochi. Come sviluppatore/architetto di server, ha lavorato con successo alle architetture server di molti giochi (Dofus Arena, Drakerz, Trivial Pursuit Go!).