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

Qt Discussion :

QHttp méthode GET et POST


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut QHttp méthode GET et POST
    Bonjour,

    j'ai essayer de faire ma connexion sur mon site mais j'ai un petit problème très gênant !

    Ma méthode GET de ma fonction fonctionne parfaitement bien ! Mais impossible de faire marcher la méthode POST. Et j'ai très besoins de d'utiliser POST...

    J'ai pas trouvé beaucoup de doc sur la méthode POST donc ça viens aussi surement de là.

    Voilà mon fichier avec la méthode GET qui fonctionne et espérant une aide.
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    #ifndef CLASSHTTP_H
    #define CLASSHTTP_H
    #define PORT 80
    #include <winsock2.h>
    #include <iostream>
    #include <fstream>
    using namespace std;
     
     
     
    class Http
    {
        private:
            SOCKET sock;
            int erreur;
            WSADATA WSAData;
            SOCKADDR_IN sin;
            bool connected;
            string host;
        public:
            Http()
            {
                erreur = WSAStartup(MAKEWORD(2,0), &WSAData);
                if(erreur)
                {
                    cerr << "Error" << endl;
                    connected = false;
                    return;
                }
                connected = false;
            }
     
            void start(string _host,string _hh = "NULL")
            {
     
                if(_hh == "NULL")
                {
                    int f = _host.find("www.");
                    if(f >= 0)
                    {
                    host = _host;
                    }
                    else
                    {
                    host = "www.";
                    host+= _host;
                    }
                }
                else
                {
                    host = _hh;
                }
                sock = socket(AF_INET, SOCK_STREAM, 0);
                sin.sin_addr.s_addr = inet_addr(getIp(_host).c_str() );
                sin.sin_family = AF_INET;
                sin.sin_port = htons(PORT);
     
                if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) != SOCKET_ERROR)
                {
                    connected = true;
                }
                else
                {
                    connected = false;
                }
            }
     
            bool isConnected()
            {
                return connected;
            }
     
            bool Send(string chaine, bool GP = true)
            {
                if(!connected)
                    return false;
     
                string requete;
                if(GP)
                    requete = "GET ";
                else
                    requete = "POST ";
     
                requete+=chaine;
                requete+=" HTTP/1.1\r\nHost:";
                requete+=host;
                requete+="\r\nContent-type: application/x-www-form-urlencoded\r\nAccept : */*\r\n\r\n";
                if(send(sock,requete.c_str(),requete.size(), 0) == SOCKET_ERROR)
                {
                    connected = false;
                    return false;
                }
                return true;
            }
     
            string Recv(int size = (2048*20))
            {
                if(!connected)
                    return "NOT CONNECTED";
                char chaine[size];
                if(recv(sock,chaine,size,0) != SOCKET_ERROR)
                    return string(chaine);
     
                connected = false;
                return "ERROR";
            }
     
        private:
            string getIp(string name)
            {
                struct in_addr  MyAddress;
                struct hostent  *host;
                host = gethostbyname(name.c_str());
                if(host != NULL)
                {
                    memcpy( &MyAddress.s_addr, host->h_addr_list[0], sizeof( MyAddress.s_addr ) );
     
                    return inet_ntoa( MyAddress );
                }
     
                return name;
            }
     
     
    };
     
    #endif
    Et je l'apel dans mon fichier tool.cpp comme ceci :
    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
     
    void Tool::on_pushButton_connection_clicked()
    {
        QString page = "/live.php?req_username=";
        page+=uiConfig.lineEdit_2->text();
        page+="&req_password=";
        page+=QCryptographicHash::hash(uiConfig.lineEdit->text().toUtf8(),QCryptographicHash::Md5).toHex();
        page+="&viens_de_site_live";
     
        Http t;// variable de la class Http
        t.start("site.fr");
     
        if(t.isConnected())
        {
            t.Send(page.toStdString());
     
            string req = "/";
            cout << t.Send(req) << endl; // Fonction pour poster une requête ici on demande l'index
     
            string tm = t.Recv();// Fonction pour recevoir après la requête d'envoi précédente
            cout << tm << endl;
     
            QString pseudo = t.Recv().c_str();
            int debut_pseudo = pseudo.indexOf("<pseudo>") + QString("<pseudo>").size();
            int taille_pseudo = pseudo.indexOf("</pseudo>") - debut_pseudo;
            pseudo = pseudo.mid(debut_pseudo,taille_pseudo);
            QMessageBox::information(0, tr("Votre Pseudo est :"),pseudo);
     
            QString mdp = t.Recv().c_str();
            int debut_mdp = mdp.indexOf("<mdp>") + QString("<mdp>").size();
            int taille_mdp = mdp.indexOf("</mdp>") - debut_mdp;
            mdp = mdp.mid(debut_mdp,taille_mdp);
            QMessageBox::information(0, tr("Votre mot de passe est :"),mdp);
        }
        else
        {
            QMessageBox::warning(0, tr("Erreur de connection"), tr("La connection n'a pu être établie avec le serveur"));
        }
    }
    Merci !

  2. #2
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Utilise QNetworkAccessManager : c'est plus simple pour les requêtes HTTP(S) .

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Ok merci mais juste pour ma culture personnelle ^^

    Je vois pas comment utiliser la méthode POST.

  4. #4
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Si tu veux le faire "à la main", la meilleure documentation est le RFC HTTP. Mais ça sort du cadre Qt.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Ce que j'ai la ça ne peut fonctionner !?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ou utilise tu QHttp dans ton code??????????????????????

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Ou utilise tu QHttp dans ton code??????????????????????
    Remarque intéressante.

    Et finalement, dans ton cas, seule ta requête change, en fonction de GET ou POST. Après, que tu utilises un QString n'a pas grand rapport avec Qt.

    Je pense que GET et POST ont déjà été assez utilisées jusqu'à aujourd'hui pour trouver un tuto clair avec google.

    Bonne recherche,

    G.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Je n'arrive pas enfaite à faire avec ce que j'ai actuellement une méthode POST j'arrive pourtant à bien utilisé la méthode GET mais pour la méthode POST...

    Je pense que GET et POST ont déjà été assez utilisées jusqu'à aujourd'hui pour trouver un tuto clair avec google.
    Oui j'ai déjà été voir avant de poster... Mais vu que j'ai commencer avec ce code je voulais juste le faire fonctionner pleinement au lieu dans refaire un...

    La méthode la plus rapide pour faire les requête c'est Qhttp ou QNetworkAccessManager ?

    Merci.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par austin.fla Voir le message
    Oui j'ai déjà été voir avant de poster... Mais vu que j'ai commencer avec ce code je voulais juste le faire fonctionner pleinement au lieu dans refaire un..
    .
    Le code que tu montre n'est pas du Qt. Tu devrais aller sur le forum C++.

    La méthode la plus rapide pour faire les requête c'est Qhttp ou QNetworkAccessManager ?
    Si tu ne fait que des requet http, je pense que QHttp est plus adapté.
    Mais au final, tout dépend de ce que tu préfère...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Enfaite je fais une requête pour identifier le membre.
    et ensuite je dois traiter les infos que je reçois en xml.

    C'est à dire :

    J'envoie les infos j'identifie le membre si il est connecter je dois renvoyer au programme des balises XML et les lires pour afficher ce qu'il y a dedans.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. URL Visant un dossier et ne passant pas par la méthode GET ou POST
    Par Maxime3012 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 16/01/2014, 08h00
  2. Réponses: 0
    Dernier message: 11/11/2011, 20h56
  3. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  4. Requête GET ou POST sans formulaire.
    Par etiennegaloup dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/10/2005, 09h58
  5. [Servlet] Méthode Get : récupérer données de l'url
    Par david71 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 01/02/2005, 11h52

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