PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → https et cookies en WinDev 20
https et cookies en WinDev 20
Débuté par garfield, 19 mai 2015 11:57 - 7 réponses
Posté le 19 mai 2015 - 11:57
Bonjour à tous,

Je dois accéder à un site en https, faire un login, et récupérer des informations.

sRésultat est une chaîne
sAgent est une chaîne = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36"

// j'active les cookies
HTTPCookieGère(".mon_domaine.com",Vrai)

// je lance une première requête
HTTPRequête("https://secure.mon_domaine.com",sAgent)
sRésultat = HTTPDonneRésultat()

// je prépare mon formulaire d'identification et je l'envoie
HTTPCréeFormulaire("FORM")
HTTPAjouteParamètre("FORM","user_login","admin")
HTTPAjouteParamètre("FORM","user_pass","mdp")
HTTPEnvoieFormulaire("FORM","https://secure.mon_domaine.com/log_post.php",httpPost,sAgent)//,"","XMLHttpRequest")
sRésultat = HTTPDonneRésultat() // sRésultat = vide

// je récupère mon info
HTTPRequête("https://secure.mon_domaine.com/select.php?id=xxxx",sAgent)
sRésultat = HTTPDonneRésultat() // sRésultat = vide et ErreurInfo = Une erreur système a été détectée pendant l'envoi de la requête HTTP.


Je ne comprends pas trop, normalement on doit :
1. activer la gestion des Cookies
2. envoyer un formulaire POST
3. ça devrait fonctionner :)

PS. J'ai déjà utilisé la classe de Tanguy sur des requêtes http, mais j'ai lu sur son site que cette classe ne fonctionne pas en https.

Les idées sont les bienvenues.

Merci.
Posté le 19 mai 2015 - 15:07
Bonjour,

je trouve que ton code manque de tests qui permettraient de savoir d’où
vient le problème

Par exemple :

// je lance une première requête
HTTPRequête("https://secure.mon_domaine.com",sAgent)
sRésultat = HTTPDonneRésultat()

Qua vaut sresultat ? Est ce normal? que vaut l'entête de la réponse ?

// je prépare mon formulaire d'identification et je l'envoie
HTTPCréeFormulaire("FORM")
HTTPAjouteParamètre("FORM","user_login","admin")
HTTPAjouteParamètre("FORM","user_pass","mdp")
HTTPEnvoieFormulaire("FORM","https://secure.mon_domaine.com/log_post.php",httpPost,sAgent)//,"","XMLHttpRequest")
sRésultat = HTTPDonneRésultat() // sRésultat = vide

Et que vaut l'entête du résultat ? Ca devrait te donner des infos

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com

// je récupère mon info
HTTPRequête("https://secure.mon_domaine.com/select.php…)
sRésultat = HTTPDonneRésultat() // sRésultat = vide et ErreurInfo =
Une erreur système a été détectée pendant l'envoi de la requête HTTP.
[/code]

Je ne comprends pas trop, normalement on doit :
1. activer la gestion des Cookies
2. envoyer un formulaire POST
3. ça devrait fonctionner :)

PS. J'ai déjà utilisé la classe de Tanguy sur des requêtes http, mais
j'ai lu sur son site que cette classe ne fonctionne pas en https.

Les idées sont les bienvenues.

Merci.
Posté le 19 mai 2015 - 17:03
Donc voici les entêtes :

sEntête est une chaîne
sRésultat est une chaîne
sAgent est une chaîne = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36"

// j'active les cookies
HTTPCookieGère(".eedomus.com",Vrai)

// je lance une première requête
HTTPRequête("https://secure.mon_domaine.com",sAgent)
sEntête = HTTPDonneRésultat(httpEntête)

// HTTP/1.1 200 OK
// Date: Tue, 19 May 2015 14:32:44 GMT
// Server: mon_domaine
// X-Frame-Options: SAMEORIGIN
// Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
// Expires: Thu, 19 Nov 1981 08:52:00 GMT
// Pragma: no-cache
// Set-Cookie: PHPSESSID=051d4b9efd078bd3674c43710b1097cb; path=/;HttpOnly;Secure
// Vary: Accept-Encoding
// Content-Length: 4619
// Content-Type: text/html; charset=ISO-8859-1

sRésultat = HTTPDonneRésultat()

// sRésultat est non vide et contient le code de la page

// je prépare mon formulaire d'identification et je l'envoie
HTTPCréeFormulaire("FORM")
HTTPAjouteParamètre("FORM","user_login","admin")
HTTPAjouteParamètre("FORM","user_pass","mdp")
HTTPEnvoieFormulaire("FORM","https://secure.mon_domaine.com/log_post.php",httpPost,sAgent)//,"","XMLHttpRequest")

// HTTPEnvoieFormulaire renvoie Vrai

sEntête = HTTPDonneRésultat(httpEntête)

// HTTP/1.1 200 OK
// Date: Tue, 19 May 2015 14:36:35 GMT
// Server: mon_domaine
// X-Frame-Options: SAMEORIGIN
// Vary: Accept-Encoding
// Content-Length: 0
// Content-Type: text/html; charset=ISO-8859-1

sRésultat = HTTPDonneRésultat()

// sRésultat est vide

// je récupère mon info
HTTPRequête("https://secure.mon_domaine.com/select.php?id=xxxx",sAgent)

// ErreurInfo = Une erreur système a été détectée pendant l'envoi de la requête HTTP.

sEntête = HTTPDonneRésultat(httpEntête)
sRésultat = HTTPDonneRésultat()

// sEntête et sRésultat sont vides


A partir d'un navigateur et une fois identifié sur le site avec le login et mot de passe, je peux sans problème lancer ma requête https://secure.mon_domaine.com/select.php… qui me renvoie un JSON.
Membre enregistré
36 messages
Posté le 19 mai 2015 - 17:27
Bonjour,

voir la doc sur HTTPParamètre : http://doc.pcsoft.fr/fr-FR/index.awp?1000018985

Il est indiqué :
Si une requête sécurisée ("https") est exécutée, le mode de gestion des requêtes est toujours effectué par Internet Explorer.

Bon dev,

Olivier
Posté le 19 mai 2015 - 17:47
J'ai testé avec :
HTTPParamètre(httpParamètreMode,1)

Cela ne change rien

Si quelqu'un a un bout de code en exemple pour un login https POST puis une requête, je suis preneur pour comprendre.
Posté le 19 mai 2015 - 19:13
Humhum, en debuggant avec IE, j'obtiens ceci dans l'entête de demande de login quand j'envoie le formulaire :
CléValeur
DemandePost /log_post.php HTTP/1.1
Accept*/*
X-Requested-WITHXMLHttpRequest
Content-Typeapplication/x-www-form-urlencoded; charset=UTF-8
Refererhttps://secure.mon_domaine.com/
Accept-Languagefr-FR
Accept-Encodinggzip, deflate
User-AgentMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Hostsecure.mon_domaine.com
Content-Length113
ConnectionKeep-Alive
Cache-ControlNo-cache
Cookie__utma=182776882.1127850173.14 ...


Question : comment gérer en WinDev un XMLHttpRequest, car cela vient peut-être de là ?

Et voici ce que j'ai en retour dans l'entête de réponse :
CléValeur
RéponseHTTP/1.1 200 OK
DateTue, 19 May 2015 16:35:22 GMT
Servermon_domaine
X-Frame-OptionsSAMEORIGIN
ExpiresThu, 19 Nov 1981 08:52:00 GMT
Cache-ControlNo-store, No-cache, must-revalidate, Post-check=0, pre-check=0
PragmaNo-cache
Set-Cookiel=xxxxxxxx; expires=Fri, 17-Nov-2017 04:35:23 GMT;HttpOnly;Secure
Set-Cookiep=912509f11xy208f96513a6b500f1fcc6; expires=Fri, 17-Nov-2017 04:35:23 GMT;HttpOnly;Secure
Keep-Alivetimeout=60, Max=111
ConnectionKeep-Alive
Content-Typetext/html; charset=ISO-8859-1
Content-Length79


Et là je recupère bien mon Cookie.

Avez des idées ou pistes ?

Merci
Membre enregistré
36 messages
Posté le 20 mai 2015 - 17:53
Bonjour,

un XMLhttpRequest n'est rien d'autre qu'une requête HTTP. Le problème ne vient pas de là.

Au niveau entêtes : le problème est probablement que l'envoi du formulaire se fait sans le cookie au niveau du header..
Je doute que ce soit géré par HTTPEnvoieFormulaire.
La doc sur HTTPCookieGere indique qie les cookies sont égérés pour HTTPRequete et HTTPEnvoie (nouveauté WD20) :
http://doc.pcsoft.fr/fr-FR/?1000019218&name=httpcookiegere_fonction

Au niveau du corps : avez-vous vérifié avec un proxy ou en faisant une capture de paquet que ça correspond bien à ce qui se passe avec un navigateur.

Bonne nouvelle : les nouvelles variables httprequete et httpréponse de la version 20 devrait vous aider à construire vos requêtes.

Bon dev,

Olivier
Posté le 04 juin 2015 - 20:54
Salut,

"X-Requested-WITH: XMLHttpRequest"+RC

A ajouter tout simplement en en-tête supplémentaire HTTP