Neueste Verbesserungen des HTTP-Client

Mit 4D v19R6 haben wir einen neuen Weg gefunden, HTTP-Anfragen durchzuführen: HTTP-Klassen. Zu diesem Zeitpunkt waren einige der Funktionen der HTTP-Klassen noch nicht endgültig, da wir sie an die neue Syntax anpassen wollten. Das ist nun geschehen! In v19R7 sind die Funktionen für komprimierte Antworten, Chunked Responses und Umleitungen nun vollständig.

Als Bonus haben wir auch eine neue Möglichkeit zum Protokollieren von HTTP-Anfragen hinzugefügt. Und da es für alle hilfreich ist, ist diese neue Protokollierung sowohl für die neuen HTTP-Klassen als auch für die alte Syntax verfügbar.

Lassen Sie mich zunächst über die Funktionalitäten der HTTP-Klassen sprechen. Wir haben die Funktionsweise der Legacy-Syntax gemeldet und an die neue Syntax angepasst. Wir haben die meisten ihrer Funktionen übernommen, nämlich HTTPs, Proxy- und Server-Authentifizierung, Umleitungen, Chunked Responses und komprimierte Antworten. Wir haben auch einige Funktionen hinzugefügt, wie die Möglichkeit, eine Anfrage abzubrechen oder die neue Protokollierung von HTTP-Client-Anfragen (dazu komme ich im nächsten Abschnitt). Die letzte Funktion, über die wir in der neuen Syntax berichten müssen, ist die Aufrechterhaltung der Verbindung durch ein keep-alive: Sie wird bald in einer viel wichtigeren Funktion enthalten sein, die ich Ihnen in einem anderen Blog-Beitrag erklären werde. Bleiben Sie dran!

Lassen Sie uns nun über die neue HTTP-Client-Protokollierung in v19R7 sprechen.
Die Aktivierung der HTTP-Client-Protokollierung ist extrem einfach. Sie müssen nur diese Zeile in Ihren Code einfügen:

HTTP SET OPTION(HTTP client log; HTTP enable log with all body parts)

Und das war’s! Alle Ihre Anfragen und Antworten werden in der Datei 4DHTTPClientLog_x.txt im Verzeichnis Logs protokolliert, und zwar im gleichen Format wie die Serverprotokolle.

Natürlich können Sie Anfragen und Antworten vollständig protokollieren, aber wenn Sie nicht wollen, dass Ihre Protokolldateien mit langen Antworten überladen sind, können Sie die „Response Bodies“ und sogar die „Request Bodies“ entfernen. Die Syntax ist der der Server-Protokollaktivierung sehr ähnlich, sodass Sie nicht überrascht sein werden.

Zum Schluss noch ein Beispiel für eine Anfrage und ihre Antwort (ohne Body), die in der HTTP-Client-Protokolldatei protokolliert werden:

# 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]

Wenn Sie Kommentare zu dieser neuen Funktion haben, können Sie uns diese gerne im offiziellen 4D Forum mitteilen.

Nicolas Brachfogel
Product Owner & Senior Developer - Nicolas Brachfogel kam 2017 als Senior Developer (4D Server und Netzwerke) zu 4D. Als Product Owner, der die Freigabe von Apple Silicon verwaltet, ist er für das Schreiben von User Stories und deren Umsetzung in funktionale Spezifikationen zuständig und stellt sicher, dass die Implementierungen der Funktionen den Kundenanforderungen entsprechen. Nicolas ist Absolvent des Institut Supérieur d'Informatique Appliquée (INSIA) und begann seine Karriere als Softwareentwickler im Jahr 2001. Nachdem er mehrere Jahre in Java und C++ programmiert hatte, spezialisierte er sich auf die Client-Server-Entwicklung für Videospielunternehmen. Als Server-Entwickler/Architekt arbeitete er erfolgreich an den Server-Architekturen vieler Spiele (Dofus Arena, Drakerz, Trivial Pursuit Go!).