Dernières améliorations du client HTTP

Traduit automatiquement de Deepl

Avec 4D v19R6, nous vous avons apporté une nouvelle façon d’effectuer des requêtes HTTP : les classes HTTP. A l’époque, certaines des fonctionnalités des classes HTTP n’étaient pas finalisées, car nous voulions les adapter à la nouvelle syntaxe. C’est maintenant chose faite ! Dans la v19R7, les fonctionnalités de réponses compressées, de réponses en morceaux et de redirections sont désormais complètes.

En bonus, nous avons également ajouté une nouvelle façon d’enregistrer les requêtes HTTP. Et comme il est utile pour tout le monde, cette nouvelle journalisation est disponible pour les nouvelles classes HTTP ainsi que pour l’ancienne syntaxe.

Tout d’abord, permettez-moi de parler des fonctionnalités des classes HTTP. Nous avons rapporté et adapté le fonctionnement de l’ancienne syntaxe pour l’adapter à la nouvelle syntaxe. Nous avons inclus la plupart de ses fonctionnalités, à savoir les HTTP, l’authentification du proxy et du serveur, les redirections, les réponses en bloc et les réponses compressées. Nous avons également ajouté quelques fonctionnalités, comme la possibilité d’annuler une requête ou la nouvelle journalisation des requêtes des clients HTTP (j’y viendrai dans le paragraphe suivant). La dernière fonctionnalité que nous devons signaler dans la nouvelle syntaxe est la persistance de la connexion par le biais d’un keep-alive : elle viendra bientôt à l’intérieur d’une fonctionnalité beaucoup plus importante… que je vous expliquerai dans un autre billet de blog. Restez à l’écoute !

Maintenant, parlons de la nouvelle journalisation du client HTTP disponible dans la v19R7.
L’activation de la journalisation du client HTTP est extrêmement simple ; il suffit d’ajouter cette ligne à votre code :

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

Et c’est tout ! Toutes vos demandes et réponses seront enregistrées dans le fichier 4DHTTPClientLog_x.txt dans le répertoire Logs avec le même format que les journaux du serveur.

Bien sûr, vous pouvez enregistrer entièrement les demandes et les réponses, mais si vous ne voulez pas que vos fichiers journaux soient encombrés de longues réponses, vous pouvez supprimer les corps des réponses et même les corps des demandes. La syntaxe est extrêmement proche de l’activation du journal du serveur, vous ne serez donc pas surpris.

Enfin, voici un exemple d’une requête et de sa réponse (sans leur corps) enregistrées dans le fichier journal du 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]

Si vous avez des commentaires concernant cette nouvelle fonctionnalité, n’hésitez pas à les partager avec nous sur le forum officiel de 4D.

Nicolas Brachfogel
- Product Owner & Senior Developer - Nicolas Brachfogel a rejoint 4D en 2017 en tant que développeur senior (4D Server et networking). En tant que Product Owner pour gérer la mise en production d'Apple Silicon, il est chargé de rédiger les user stories et de les traduire en spécifications fonctionnelles, ainsi que de s'assurer que les implémentations des fonctionnalités répondent aux besoins des clients. Diplômé de l'Institut Supérieur d'Informatique Appliquée (INSIA), Nicolas a commencé sa carrière en tant que développeur de logiciels en 2001. Après plusieurs années de codage en Java et C++, il s'est spécialisé dans le développement client-serveur pour des sociétés de jeux vidéo. En tant que développeur/architecte serveur, il a travaillé avec succès sur les architectures serveur de nombreux jeux (Dofus Arena, Drakerz, Trivial Pursuit Go !).