IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

HTTPRequete sur page formulaire POST


Sujet :

WinDev

  1. #1
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut HTTPRequete sur page formulaire POST
    Bonjour,

    J'essaye de faire une requête pour remplir automatiquement un formulaire sur une page web.

    Quand je regarde le source de la page web, j'ai une structure de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <form action="decode.php" method="POST" name="connexion" onsubmit="javascript:return validForm();">
     
    <div class="identifiant">
    <strong><span class="rouge">E-mail</span> </strong><br />
    <input type="text" name="username" id="login" size="30" />
    </div>
     
    <div class="motdepasse">
    <strong>Mot de passe</strong><br />
    <input type="password" name="password" id="password" size="30" />
    </div>
     
    </form>
    Que je traduis de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    sUrlRequete est une chaîne
    // URL avec action 
    sUrlRequete ="https://monsite/decode.php"
     
    // Paramètres Post
    sParametrePost est une chaîne
    sParametrePost = ChaîneConstruit("username=%1&password=%2", "monlogin", "monpwd") 
     
    // Requête
    SI HTTPRequête(sUrlRequete, "", "", sParametrePost) = Vrai ALORS
    	Info("Requête OK, résultat :", HTMLVersTexte(HTTPDonneRésultat(httpRésultat)))
    	Info ("OK")
    SINON
    	Erreur(ErreurInfo())
    FIN
    Cela ne marche visiblement pas ... est ce du au fait que je n'ai pas pris en compte le "onsubmit="javascript:return validForm();" .... ??? si oui, comment faire pour le faire apparaitre dans le HTTPRequete ?

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Salut courdi !

    Est-ce que tu encodes ta requête correctement ? (UTF-8 ? Ca dépend du serveur cible). La théorie semble correcte. Je veux dire, tu crées bien une chaîne clé-paire qui va se retrouver dans le contenu de la requête HTTP (pré-requis de POST).

    Tu peux aussi essayer d'accéder à l'URL directement et changer la ligne

    sUrlRequete ="https://monsite/decode.php?username=%1&password=%2"

    Le javascript validForm() n'est à priori qu'un validateur de formulaire. Normalement, c'est juste une garde pour éviter une requête incomplète ou fausse. Mais sans le code, je ne puis développer plus...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    En fait ce que j'essaye de faire, c'est une validation automatique de mon accès SFR WIFI ...

    Je sais qu'il existe des scripts permettant de le faire mais je voulais comprendre comment le faire en WINDEV.

    Dans l'exemple que j'ai donné, j'ai volontairement simplifié (en changeant certains noms en particulier le .php, le nom du site, et en limitant le nombre de paramètres du POST), mais l'essentiel était là.

    Si vous voulez bien m'aider à avoir un programme qui fonctionne en WINDEV, la vraie page de connexion est ici :
    https://hotspot.wifi.sfr.fr/

    PS : visiblement le .js ne fait que vérifier mais il est possible que des subtilités soient planquées.
    Le .js est ici (on le trouve dans l'entete du HTML du portail) :
    https://hotspot.wifi.sfr.fr/js/pcnb4.js

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Vous pouvez essayer en utilisant les fonctions HTTPCréeFormulaire, HTTPAjouteParamètre et HTTPEnvoieFormulaire.

    Ce qui donnerai quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HTTPCréeFormulaire("FORM")
    HTTPAjouteParamètre("FORM", "username", ".....")
    HTTPAjouteParamètre("FORM", "password", ".....")
    ...
    HTTPEnvoieFormulaire("FORM", "https://hotspot.wifi.sfr.fr/nb4_crypt.php")

  5. #5
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Merci pour la réponse ...

    C'est exactement ce que j'ai commencé à faire aussi, mais ce qui m'inquiétait, c'était de ne pas voir la possibilité de lancer le .js ....

    Mais peut-être n'est ce pas nécessaire. Est ce quelqu'un peut vérifier le .js (je suis un peu nul en javascript) ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Le js contrôle simplement les champs "username" et "password" et défini les valeurs par défaut pour les champs cachés, ce qui est pratique car cela permet de savoir quoi mettre dedans !

    var challenge = '';
    var accessType = 'neuf';
    var lang = 'fr';
    var userurl = 'http://www.sfr.fr';
    var mode = '3';
    var channel = '0';
    var uamip = '192.168.2.1';
    var uamport = '3990';
    var mac = '00:00:00:00:00';
    ce qui nous donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HTTPAjouteParamètre("FORM", "username", ".....")
    HTTPAjouteParamètre("FORM", "password", ".....")
    HTTPAjouteParamètre("FORM", "conditions", "1")
    HTTPAjouteParamètre("FORM", "challenge", "")
    HTTPAjouteParamètre("FORM", "accessType", "neuf")
    HTTPAjouteParamètre("FORM", "lang", "fr")
    HTTPAjouteParamètre("FORM", "mode", "3")
    HTTPAjouteParamètre("FORM", "userurl", "http://www.sfr.fr")
    HTTPAjouteParamètre("FORM", "uamip", "192.168.2.1")
    HTTPAjouteParamètre("FORM", "uamport", "3990")
    HTTPAjouteParamètre("FORM", "channel", "0")
    HTTPAjouteParamètre("FORM", "mac", "00:00:00:00:00")

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Pour aller un peu plus loin, HTTPAjouteParamètre() gère en fait une table clé-valeur (associative si tu préfères) en interne. Ensuite, il se charge de générer la chaîne de caractère passée au serveur web

    Le procédé est à peu de choses près le même en Java

  8. #8
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Merci ....

    ceci explique peut être pourquoi cela ne marchait pas ...

    Je n'avais pas bien regardé ce que faisait le .js

    Est-ce que quelqu'un a la possibilité de faire un essai (je n'ai pas de bornes SFR Wifi à proximité) ?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Dans le logiciel "FreeWifi_Manager" réalisé en script AutoIT3, le script effectue :
    - un chargement complet de la page de connexion, comme on pourrait le faire avec un champ HMTL dans Windev
    - remplit les champs
    - simule un click sur le bouton de soumission

    Je ne pense pas qu'on puisse faire ce type d'action (simuler des actions manuelles sur un champ HTML) avec WD ? Ai-je raison ? On ne peut faire que des requêtes HTTP avec WD pour simuler une action sur une page (même si on l'a chargée dans un champ HTML) ?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Concernant ma remarque précédente, je me réponds à moi même.

    Deux possibilités :
    - "graphiquement" en positionnant la souris au bon endroit (pas top !)
    http://forum.pcsoft.fr/fr-FR/pcsoft....cache/read.awp

    - en chargeant la page dans un activeX et en utilisant la classe CIExplore:
    http://forum.pcsoft.fr/fr-FR/pcsoft....outon/read.awp

    Bon, finalement je préfère le faire en requête HTTP .... si cela marche... est-ce que quelqu'un a essayé ?

    Il me faudrait la même chose pour Free....

  11. #11
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Bon si je reviens vers une requête, les linuxiens avec la commande curl sont allés à l'essentiel !

    Tout doit y être, il "suffit" de traduire en WD. Mais ce qui est étrange, c'est qu'on n'a pas les mêmes paramètres. Il faut que je vérifie ma page de connexion ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #!/bin/bash
    #Medor
    #Script en ligne de commande, d'authentification pour Free / Neuf¹SFR WiFi Public
    #Mettre le(s) : "identifiant" & "mot de passe"
    #et verifier le nom de votre interface WiFi (wlan0 par defaut)
     
    testpage()
    {
       page=$(curl -s -k -L "http://www.google.com")
       echo "$page" | grep -q "<title>Google</title>" && \
          echo "Le service ${essid} est actif & fonctionnel" &&
          exit 0
    }
     
    freewifi()
    {
       testpage
     
       local url="https://wifi.Free.fr/Auth"
       local okmatch="CONNEXION AU SERVICE REUSSIE"
       local username="0123456789"
       local password="password_free"
     
       curl -s -F "login=${username}" -F "password=${password}" "${url}" | \
          grep -q "${okmatch}" && \
          success="yes"
    }
     
    neufwifi()
    {
       testpage
     
       local challenge=$(echo "$page" | \
          sed -nr 's/.*name=\"challenge.*value=\"([0-9a-z]+)\".*/\1/p')
     
       test -z "${challenge}" && \
          echo "Ce n'est pas la bonne page de login" && \
          exit 1
     
       local url="https://hotspot.neuf.fr/nb4_crypt.php"
       local okmatch="licitations"
       local username="0123456789"
       local password="password_neuf"
     
       response=$(curl -s -k -L -d "username=${username}&password=${password}&cond=on&accessType=neuf&nb4=${url}&challenge=${challenge}" "${url}" | \
          sed -nr 's/.*response=([0-9a-z]+).*/\1/p')
     
       curl -s -k -L "http://192.168.2.1:3990/logon?username=ssowifi.neuf.fr/${username}&response=${response}&uamip=192.168.2.1&userurl=http%3A%2F%2Fwww.fon.com%2Ffr%2Flanding%2Ffoneroneufbox%3Bfon%3B%3B&lang=fr&ARCHI" | \
          grep -q "${okmatch}" && \
          success="yes"
    }
     
    #changer ici "wlan0" par le nom de votre interface wifi (voir ifconfig)
    essid=$(iwgetid | grep "wlan0" | cut -d : -f 2)
    case "${essid}" in
       ('"FreeWifi"') freewifi ;;
       ('"Neuf WiFi"'|'"SFR WiFi Public"') neufwifi ;;
       (*) echo "Service ${essid} inconnu" ; exit 0 ;;
    esac
     
    test -n "${success}" && \
       echo "Connexion au service ${essid} : REUSSIE" && \
       exit 0
     
    exit 1

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut Courdi!

    Désolé dans mon pays pas de sfr!

    Moi j'aurai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPRequête("https://hotspot.wifi.sfr.fr/nb4_crypt.php","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0","","username=tonemail%40yahoo.fr&password=tonmotdepasse&conditions=on&challenge=&accessType=neuf&lang=fr&mode=3&userurl=http%3A%2F%2Fwww.sfr.fr&uamip=192.168.2.1&uamport=3990&channel=0&mac=00%3A00%3A00%3A00%3A00%7Cundefined&connexion=Connexion")
    Bon DEV

Discussions similaires

  1. [ASP .NET2] Post data sur un formulaire
    Par prez dans le forum ASP.NET
    Réponses: 8
    Dernier message: 17/08/2007, 10h59
  2. Question sur mise en page formulaire
    Par pcayman dans le forum IHM
    Réponses: 1
    Dernier message: 14/08/2007, 11h53
  3. Réponses: 3
    Dernier message: 01/06/2007, 12h12
  4. formulaire POST envoyé sur une page en GET
    Par Eusebius dans le forum Langage
    Réponses: 15
    Dernier message: 01/09/2006, 16h10
  5. Formulaire posté sur la mauvaise page
    Par Prue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/07/2005, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo