Lorsqu'une application, ou un site web, communique en HTTPS, il peut arriver notamment pour des raisons de sécurité, que des échanges échouent sur une configuration particulière. Par exemple sur le poste de développement tous les appels HTTPS (webservice, API REST...) passent, mais sur le serveur qui héberge l'application ou le site, il n'y a pas de réponse, ou pas celle attendue.
Dans ce cas, il est recommandé de tester des appels directs des serveurs avec lesquels l'application doit échanger, dans les différents modes possibles. Cela permet par recoupements d'orienter les recherches sur l'origine de l'échec de l'appel HTTPS, et donc de trouver la façon de le résoudre.
Voici un méthode :
- déployer une mise à jour de l'application,
- dans l'assistant de création de ce cette version sélectionner "Choisir les outils optionnels à inclure" à l'étape complément 1/2,
- puis sélection "WDScript - Editeur de scripts WLangage" dans la liste,
- installer la mise à jour de l'application sur le poste qui ne parvient pas à faire les échanges HTTPS,
- lancer WDScript. Attention aux autorisations, car avec un lancement interactif, WDScript aura tous les privilèges de l'utilisateur en cours, celui qui a ouvert la session Windows. Il peut être bien de lancer WDScript :
- avec l'utilisateur par défaut,
- avec une élévation de privilège en tant qu'administrateur,
- avec un autre utilisateur, celui qui exécute le traitement qui ne parvient pas à échanger. Par exemple si c'est un site web, on pourra lancer WDScript avec l'utilisateur IUSR en pressant Shift sur l'exécutable.
- coller dans le script le code ci-dessous, en complétant le tableau "sTabURL" pour inclure des serveurs génériques, et bien sûr les serveurs avec lesquels la difficulté apparaît,
- exécuter le script.
Les différents retours des appels, dans les différents modes possibles, doivent permettre de cerner l'origine exacte du blocage des échanges.
sTabURL est un tableau de chaîne nTabMode est un tableau associatif d'entiers MaRequete est une httpRequête MaRéponse est une httpRéponse
nTabMode["WININET"] = 1 nTabMode["Multiplateforme"] = 2
sTabURL.Ajoute("https://pcsoft.fr") sTabURL.Ajoute("https://www.google.fr/")
sOS est une chaîne = SysVersionWindows(sysVersionNuméro)+"/"+SysVersionWindows(sysVersionCompil) TraceConstruit("Exécution depuis %1, avec framework %2 (WDCOM %3)"+RC, sOS, VersionWINDEV(versionFramework), ExeInfo(exeVersion, "WD"+Val(VersionWINDEV())+"0COM"+(EnMode64bits ? "64" SINON "")+".DLL"))
POUR TOUT ÉLÉMENT nMode, sLibMode de nTabMode HTTPParamètre(httpParamètreMode, nMode) POUR TOUT ÉLÉMENT sURL de sTabURL SI PAS httpRequête(sURL) ALORS TraceConstruit("## En mode %1 (%2) avec la fonction HTTPRequete (compat) accès au site %3 : %4", sLibMode, nMode, sURL, "Impossible"+RC+ErreurInfo(errComplet)) SINON TraceConstruit("## En mode %1 (%2) avec la fonction HTTPRequete (compat) accès au site %3 OK, avec la réponse %4", sLibMode, nMode, sURL, ExtraitChaîne(HTTPDonneRésultat(httpEntête), 1, RC)) FIN SI nMode > 1 ALORS MaRequete..URL = sURL MaRequete.TimeoutConnexion = 5s MaRéponse = HTTPEnvoie(MaRequete) SI ErreurDétectée ALORS
TraceConstruit("## En mode %1 (%2) avec le type HTTPRequete accès au site %3 : %4", sLibMode, nMode, sURL, "Impossible"+RC+ErreurInfo(errComplet)) SINON
TraceConstruit("## En mode %1 (%2) avec le type HTTPRequete accès au site %3 OK, avec la réponse %4", sLibMode, nMode, sURL, MaRéponse.CodeEtat) FIN FIN FIN FIN
A noter que les procédures internes sont autorisés dans les scripts. On peut donc suivre plus finement les échanges dans le cas de l'appel avec HTTPEnvoie, en utilisant la propriété ..ProcédureTrace.
Autre billet lié à WDScript :
Comment installer WDScript sur un serveur ou sur un poste pour lancer des scripts en WLangage ? |