Page 1 sur 1

WinHttp.WinHttpRequest.5.1 et token pour se connecter

Posté : lun. 13 déc. 2021 23:13
par A2Energie
Bonjour amis Autoitiens, :D

Je viens vers vous car j'ai un problème que je ne parviens pas à résoudre depuis pas mal de temps.
Pour télécharger un fichier sur un site internet je passe par WinHttp.WinHttpRequest.5.1
Jusqu'à présent, tout fonctionnait mais ils ont fait des mises à jour sur ce site et donc je ne parviens plus à m'y connecter.

Sur la page de connexion je remarque un hidden qui affiche : <input type="hidden" name="_csrf_token" value=" [....]
Je me demande si mon problème de connexion à ce site ne viendrai pas de ce token ?
Ou si le problème vient d'ailleurs.

Je sais que je dois vous poster d'avantage d'information mais j'aimerais conserver ce site anonyme. donc voici quelques éléments que je peux fournir.

La page de connexion du site :

<form method="post">
<fieldset>
<div class="form-group col-md-6">
<label for="inputEmail">Votre adresse email</label>
<input type="email" value="" name="email" id="inputEmail" class="form-control" required autofocus>
</div>
<div class="form-group col-md-6">
<label for="inputPassword">Mot de passe</label>
<input type="password" name="password" id="inputPassword" class="form-control" required>
</div>
<div class="col-md-12 text-right">
<input type="hidden" name="_csrf_token"
value="92.4WJoVJGbl_uvNWQ_o0hsI8DnHXSykzOlEFSO2hE5hU8.1y47Evns9qrHUVdK0zA0dLSNbkXlpUfxUTf-kUlb9AmgJwIV9fDEmup-IQ"
>
<button class="btn btn-primary" type="submit">
Connexion
</button>
</div>
</fieldset>
</form>


Mon bout de code :

$oHTTP.Open("POST", "https://LE_SITE/", False)
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send("email=..........&password=............")

$oHTTP.Open("GET", "https://LE_SITE_PDF", False)
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send()
$sData = $oHTTP.ResponseBody


En vous remerciant pour vos réponses.

Re: WinHttp.WinHttpRequest.5.1 et token pour se connecter

Posté : mar. 21 déc. 2021 14:14
par jpascal
Bonjour,

Vous avez deux solution :
- soit afficher la page, remplir les champs automatiquement et soumettre le form avec le bouton submit
- soit utiliser WinHttp mais vous devez envoyer le paramètre _csrf_token dans votre requête POST

Re: WinHttp.WinHttpRequest.5.1 et token pour se connecter

Posté : jeu. 23 déc. 2021 00:00
par A2Energie
Bonjour, :D

Ah merci pour cette réponse, content d'avoir une réponse. :bisou:

Du coup je serais partant pour la seconde solution.
Comment puis-je envoyer le paramètre csrf_token dans la requête POST ?
J'ai bien tenté de le faire, mais je n'y parviens pas.
Car le csrf_token est généré avant qu'il ne soit affiché, car une fois affiché il est modifié si je réenvoi une requête.

Auriez vous un exemple ou un début de code si possible ?

En vosu remerciant, :wink:

Re: WinHttp.WinHttpRequest.5.1 et token pour se connecter

Posté : ven. 31 déc. 2021 12:51
par jpascal
Bonjour,

Lorsque vous faites $sData = $oHTTP.ResponseBody, vous récupérez le contenu de la page qui s'affiche.
Il vous suffit de faire une recherche dans ce contenu (avec une RegEx par exemple) pour récupérer la valeur du token dans la variable $sToken.
Et renvoyer ensuite une requête avec tous les paramètres.

Pour envoyer le contenu de ce token, il vous faut utiliser une commande de ce type :
_WinHttpSimpleSSLRequest($hConnect, "POST", $sPage, Default, $sPostData)
avec $sPostData = 'email=' & $sEmail & 'password=' & $sPassword & 'csrf_token=' & $sToken

Je vous conseille fortement de lire l'aide de WinHttp pour bien comprendre les différentes fonctions et paramètres.

Les noms de variables que j'ai employés ne sont que des suggestions :!: