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

VB 6 et antérieur Discussion :

Envoyer des informations en POST vers une url en vb6


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut Envoyer des informations en POST vers une url en vb6
    Bonjour,
    Je vous préviens je suis novice en vb (premier programme : hier matin).
    J'ai développé un module sur une page web qui doit pouvoir être appelé à partir d'une application vb. Je dois lui envoyé des variables en POST.

    J'ai trouvé deux façons de réaliser ça : utiliser l'objet Inet ou l'objet

    XmlHttpRequest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim ObjetXhr As MSXML.XMLHTTPRequest
    Set ObjetXhr = CreateObject("Microsoft.XMLHTTP")
    ObjetXhr.Open "POST", AdresseServeurWeb() + "MaPageWeb?get=xxxx", False
    ObjetXhr.setRequestHeader "Content-Type", "Application/x-www-form-urlencoded"
    ObjetXhr.send "post=yyy"
    Inet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim strURL As String, strFormData As String
     
    strURL = AdresseServeurWeb() + "MaPageWeb?get=aaaa"
     
    strFormData = "post=bbbb"
    Me.InetSignature.Execute strURL, "POST", strFormData
    Dans les deux cas ma page est appelé, les variables GET sont présentes, mais pas les POST.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    salut,

    j'ai un javascript dans lequel je fais appel à xmlhttprequest, voilà comment ça se présente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var method   = "POST";
    var filename = "mapage1.php";
    var data     = "qsdsqdsqsqqdq";
     
    xhr_object.open(method, filename, true);
     
    xhr_object.onreadystatechange = function() {
       if(xhr_object.readyState == 2) {
        window.location.replace('mapage2.php');
       }
    }
     
    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr_object.send(data);
    La différence c'est le flag de synchronisation ... Essaye pour voir

    edit : ah oui, ta variable "post=yyy" me parait une mauvaise idée intuitivement :p

    Appelles-là autrement on sait jamais

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    En ce qui concerne le nom des variables je suis d'accord ça porte a confusion mais c'était pour l'exemple.

    Ben effectivement tout ca fait beaucoup penser à l'ajax. Mais bizarement chez moi ne marche pas aussi facilement.

    J'ai essayé ca :

    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
     
    Dim ObjetXhr As MSXML.XMLHTTPRequest
    Set ObjetXhr = CreateObject("Microsoft.XMLHTTP")
     
    ObjetXhr.Open "POST", AdresseServeurWeb() + "MaPageWeb?varget=xxxx", False
     
    ObjetXhr.onreadystatechange = FunctionReadyStateChange()
     
    ObjetXhr.setRequestHeader "Content-Type", "Application/x-www-form-urlencoded"
    ObjetXhr.send "varpost=yyyyyy"
     
    Private Function FunctionReadyStateChange()
        Debug.Print ObjetXhr.readyState
        If ObjetXhr.readyState = 4 Then
            MsgBox "Done"
        End If  
    End Function
    J'ai une erreur d'exécution 424 : un objet est requis. (très explicite les erreurs VB)

    le debug me renvoie un affichage du readyState = 1

  4. #4
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Pour l'erreur signalée, c'est une question de portée de la variable, n'étant pas declaré public avec Dim (mais dans l'entête du Form) mais dans une procedure, elle n'est utilisable que dans celle-ci, donc dans la fonction elle est non connue.
    l'appel à la fonction devant être faite ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetXhr.onreadystatechange = FunctionReadyStateChange(ObjetXhr)
    et la petite modification de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Function FunctionReadyStateChange(ObjetApasser As Object) As Integer
    FunctionReadyStateChange = 0
       Debug.Print ObjetApasser.readyState
        If ObjetApasser.readyState = 4 Then
            MsgBox "Done"
        End If  
    FunctionReadyStateChange = ObjetApasser.readyState
    End Function
    là au moins l'erreur n'existera plus.
    En VB (peut être pas dans certains autres languages de programmation)une fonction renvoie une reponse dans son NOM, d'ou l'ajout que j'ai fait dans ta fonction.

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    FunctionReadyStateChange ne sert à rien dans ce code en mode synchrone -
    il n'est utilisé qu'en mode asynchrone -
    de plus, placé à cet endroit il ne peut que bloquer l'exécution (readystate ne sera modifié qu'après l'exécution de la méthode send).
    En mode synchrone, Send ne rendra la main qu'après réponse du serveur,
    il est donc nécessaire par précaution d'ajouter un settimeouts.
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        With ObjetXhr
            .Open "POST", AdresseServeurWeb() + "MaPageWeb", False  
            .SetTimeouts 20000,20000,20000,20000  
            .setRequestHeader "Content-Type", "Application/x-www-form-urlencoded"    
            .send "varpost=yyyyyy"
     
            If .Status = 200 Then ret = .ResponseText
        End With

  6. #6
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Tout d'abord je tiens à vous remercier pour vos réponses.

    Je crois que le setTimout est défini pour une autre version de MSXML, enfin j'ai voulu en mettre une plus récente mais le code plante.

    J'ai fouillé un peu plus, et je sens que je vais devoir avoir une remise à niveau en ce qui concerne le HTTP.
    Lors d'une requête post, les variables sont-elles bien transmisent dans le corps de la tramme sous la forme nomVar1=valeur&nomVar2=valeur ?

    Si c'est le cas quand on exécute l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ObjetXhr.send "varpost=maVariablePOST"
    la chaine "varpost=maVariablePOST" se retrouve normalement dans le corps de la tramme.
    J'ai voulu vérifier que c'était bien :

    Mon programme VB :
    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
     
        Dim ObjetXhr As New MSXML2.XMLHTTP30
     
        Dim varPost As String
        varPost = "varpost=maVariablePOST"
        With ObjetXhr
            .Open "POST", AdresseServeurWeb() + "MaServletJava", False
       '    .setTimeouts 20000, 20000, 20000, 20000
            .setRequestHeader "Content-Length", CStr(Len(varPost))
            .setRequestHeader "Content-Type", "Application/x-www-form-urlencoded"
            If .readyState = 1 Then .send varPost
            If .Status = 200 Then
                MsgBox .responseText
            End If
        End With
    Je récupère ma variable dans une servlet java :
    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
     
    public void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws ServletException, IOException {
    	System.out.println("POST");
    	Enumeration en = pRequest.getParameterNames();
    	while(en.hasMoreElements()){
    	   String nomPost = (String)en.nextElement();
               System.out.println("  -->  "+nomPost+"="+pRequest.getParameter(nomPost));
    	}
    	pResponse.getOutputStream().println(" < Requete POST > "+pRequest.getContentLength());
    	InputStream input = pRequest.getInputStream() ;
    	String str = "" ;
    	for (int a = input.read(); a != -1; a = input.read()) {
    	    str += ((char) a);
            }
    	System.out.println("corps : "+str);
    	pResponse.getOutputStream().println(str)  ;		
    }
    A la sortie je récupère donc :
    pRequest.getParameter("varpost") -> null
    pResponse.getOutputStream() -> "varpost=maVariablePOST"
    Le log :

    POST
    corps : varpost=maVariablePOST

    Si j'execute ma servlet à partir d'un naviteur internet, le résultat est inversé rien dans le corps et les variables sont valorisées avec l'instruction pRequest.getParameter("varpost")

    Question simple : Pourquoi ? les variables en POST ne sont-ils pas dans le corps ? sinon ou sont-elles ? Comment les mettre au bonne endroit en VB ? Est-ce un problème d'encodage ? faut-il ajouté quelque chose dans le header ?

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par bugz57 Voir le message
    Tout d'abord je tiens à vous remercier pour vos réponses.

    Je crois que le setTimout est défini pour une autre version de MSXML, enfin j'ai voulu en mettre une plus récente mais le code plante.

    J'ai fouillé un peu plus, et je sens que je vais devoir avoir une remise à niveau en ce qui concerne le HTTP. .../...
    setTimeout est disponible via la référence à « Microsoft WinHTTP Services, version 5.1»
    Les données en Méthode Post sont bien transmises dans le Header contrairement à la méthode GET où elles sont transmises via l'adresse.

    Je ne comprends toujours pas le if r.readystate

  8. #8
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Si le readystate est inutile je supprime pas de problème. La syntaxe me rappelle tellement l'ajax c'est un réflexe de vouloir faire de l'asynchrone

    D'accord pour GET et POST mais pourquoi je ne peux pas récupérer mes variables POST en java comme je le faisais avec un envoi classique de formulaire html. Je trouve ça étrange...

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Ecrit un script php pour tester la récupération de tes données -
    cela tiens en peu de lignes et tu sauras d'où viens le problème.

  10. #10
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Je vais tenter ça chez moi ce weekend (pas très envie d'installer un serveur php sur le joli matériel de bureau ) , je te tiens au courant.

  11. #11
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Bonjour,
    J'ai appelé php. Sans grande surprise ni illumination même résultat que par java...

    code VB :
    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
    Dim ObjetXhr As New MSXML2.XMLHTTP30
        Dim page As String
        page = "http://localhost:5454/test.php"
        Dim varPost As String
        varPost = "varpost=maVariablePOST"
        Dim ret As String
        With ObjetXhr
            .Open "POST", page + "?varget=maVariableGet", False
            .setTimeouts 20000, 20000, 20000, 20000
            .setRequestHeader "Content-Length", CStr(Len(varPost))
            .setRequestHeader "Content-Type", "text/xml"
            .send varPost
            If .Status = 200 Then
                Debug.Print (.responseText)
            End If
        End With
    code PHP :

    Code php : 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
     
    <?php 
    echo $_SERVER['content-length'] ;
    echo "GET : ";
    foreach($_GET as $k => $v){
    	echo "$k = $v ; " ; 
    }
    echo "POST : ";
    foreach($_POST as $k => $v){
    	echo "$k = $v ;" ; 
    }
    echo "REQUEST : ";
    foreach($_REQUEST as $k => $v){
    	echo "$k = $v ;" ; 
    }
    echo "ROW_POST : ".$HTTP_RAW_POST_DATA ;
    ?>

    résultat :
    GET : varget = maVariableGet ; POST : REQUEST : varget = maVariableGet ;ROW_POST : varpost=maVariablePOST

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    si ça se trouve ils ont désactivé post dans apache.ini

  13. #13
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Si seulement...,
    En principe je fonctionne avec un serveur tomcat. L'application que je veux appeler est sous java et je suis sur que les variables post sont bien activées puisque le bug survient juste quand l'appel provient de VB.

    J'ai installé wamp avec les paramètres par défaut, juste pour faire le test avec php. J'ai vérifier php.ini : post_max_size = 8M

    Et lors d'une requête get via un formulaire html, pas de problème.

    Donc le problème ne vient pas de là.
    Je pensais plutôt que .send("varpost=maVariablePost") doit être mal formé, un caractère de retour à la ligne qui manque, un élément à rajouter dans le header, genre une subtilité http que j'ai pas saisi, mais de ce côté je bloque un peu.

    Parce que dans mon cas je n'arrive pas à récupérer mes variables sous leur forme habituelle. Mais j'arrive à récupérer la chaine "varpost=maVariablePost" avec la fonction request.getInputStream() en java et avec $HTTP_RAW_POST_DATA en php.

    Au pire je me contente de ça, et je récupère mes données de cette manière. Mais je suis pas sur que ce soit très propre

  14. #14
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par bugz57 Voir le message
    je suis sur que les variables post sont bien activées puisque le bug survient juste quand l'appel provient de VB.
    je comprends plus rien, tu viens pas d'essayer en live sous php et n'as pas constaté que ça ne marchait pas non plus ?

  15. #15
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Excusez moi si mes explications ont paru flou.

    Quand on récupère en php des variables en post, on utilise la synthaxe :
    $_POST["varpost"]

    Avec cette instruction je n'atteins rien.

    Par contre si j'utilise $HTTP_RAW_POST_DATA, il me retourne la chaine "varpost=maVariablePost".

    Donc ca veut dire que si je veux récupérer mes différentes variables je suis obligé de faire un traitement sur ma chaine.

Discussions similaires

  1. [Débuter] Envoyer des informations de C++ vers QML
    Par caymus dans le forum Qt Quick
    Réponses: 6
    Dernier message: 05/12/2012, 10h49
  2. [XL-2003] Envoyer des informations de Excel vers Internet Explorer
    Par Banosjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/04/2011, 21h39
  3. Envoyer des données en POST dans une nouvelle fenetre
    Par benthebest dans le forum jQuery
    Réponses: 9
    Dernier message: 18/02/2011, 10h02
  4. Réponses: 9
    Dernier message: 04/06/2008, 11h38
  5. envoyer des informations du controleur vers la vue
    Par leon1983 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/05/2008, 15h36

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