A partir de la version 2025 "Update 2", les projets en mode SaaS profitent d'une procédure de trace pour les échanges FTPS.
Cette procédure est extrêmement pratique :
- pour connaître les données liées au chiffrement de la connexion (négociation TLS, handshake, cipher, certificat...),
- pour rechercher l'origine d'un échec de connexion sur un serveur particulier.
La propriété ProcédureTrace était déjà disponible pour les échanges HTTPS (type HttpRequête et fonction HTTPEnvoie).
Voici un exemple de code de connexion, avec la procédure de trace et le nouveau type ftpConnexion :
FTPParamètre(ftpParamètreMode, 1)
MonFTP est une ftpConnexion MonFTP.Serveur = "ftps://monserveur" MonFTP.Utilisateur = "utilisateur" MonFTP.MotDePasse = "motdepasse" MonFTP.DuréeNonRéponse = 5 s MonFTP.NuméroPort = 990 MonFTP.ProcédureTrace = ProcTrace
SI MonFTP.Connecté() ALORS MonFTP.Déconnecte() Trace("OK") SINON Erreur(ErreurInfo(errComplet)) FIN
PROCEDURE INTERNE ProcTrace(nTypeInfo est entier, bufByData est un Buffer)
SELON nTypeInfo
CAS httpTraceEntêteEnvoyé: Trace("Entête envoyé : ", UTF8VersChaîne(bufByData)) CAS httpTraceDonnéeEnvoyée: Trace("Données envoyées : ", bufByData) CAS httpTraceEntêteRecu: Trace("Entête reçu : ", UTF8VersChaîne(bufByData)) CAS httpTraceDonnéeRecue: Trace("Données reçues : ", bufByData)
CAS httpTraceInfo : Trace("Info : ", bufByData) FIN FIN
On aura par exemple dans la trace :

========== Mise à jour 25/3/2025 ==========
Bon à savoir : exactement comme avec le type HttpRequete la procédure callback indiquée à la propriété ..ProcédureTrace est également appelée pour les données.
On peut l'expérimenter facilement avec l'exemple ci-dessus en ajoutant un transfert de fichier :
SI MonFTP.Connecte() ALORS fSauveTexte(fRepDonnées()/"test.txt", "Contenu fichier à transférer") SI MonFTP.Envoie(fRepDonnées()/"test.txt", "test.txt") ALORS Trace("OK fichier envoyé avec succès") SINON Trace("KO "+ErreurInfo(errMessage)) FIN
MonFTP.Déconnecte()
FIN
La trace montre la totalité de l'échange y compris les données :

On pourrait donc si besoin avoir une action sur le contenu des données, durant le transfert !
Par exemple si on doit récupérer des données voluminueuses qui vont transiter avec de nombreuses trames, il sera possible de faire un traitement sur ces données de façon continue tout au long de la récupération, et pas seulement après l'achèvement complet du transfert.
|
|
< Retour
|
|
|
|
|
|