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

Réseau Discussion :

Impossible d'utiliser les cookies de session


Sujet :

Réseau

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Impossible d'utiliser les cookies de session
    Salut à tous !
    Je fais un petit programme pour se connecter à un site internet grace aux requetes HTTP de QNetwork.
    Voici le code allégé :

    Requete.hpp
    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
    #ifndef REQUETE_HPP
    #define REQUETE_HPP
    #include <QApplication>
    #include <QtGui>
    #include <QtWebKit>
    #include <QWebView>
    #include <iostream>
     
     
    class Requete : public QWidget {
        Q_OBJECT
        QPushButton *bouton_get;
        QVBoxLayout *layout;
        QNetworkAccessManager *reseau_moteur;
        QNetworkCookieJar *bocal_cookie;
     
    public:
        Requete();
        QLineEdit *ligne_pseudo, *ligne_passe;
     
    public slots:
        void clic_envoi();
        void resultat_post();
        void resultat_get();
     
    };
     
    #endif // REQUETE_HPP

    Requete.cpp
    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
    #include "Requete.hpp"
     
     
    Requete::Requete() : QWidget()	{
        ligne_pseudo = new QLineEdit;
        ligne_passe = new QLineEdit;
        bouton_get = new QPushButton;   bouton_get->setText("get");
        layout = new QVBoxLayout(this);
        reseau_moteur = new QNetworkAccessManager;
        bocal_cookie = new QNetworkCookieJar;
     
        layout->addWidget(ligne_pseudo);
        layout->addWidget(ligne_passe);
        layout->addWidget(bouton_get);
     
        QObject::connect( bouton_get, SIGNAL(clicked()), this, SLOT(clic_envoi()) );
    }
     
     
    void Requete::clic_envoi()  {
        QString dataPost = "d=1320333735028&username=" + ligne_pseudo->text()
    		       + "&password=" + ligne_passe->text()
    		       + "&remindme=1" ;
     
        QNetworkRequest reseau_requete( QUrl( "http://www.developpez.com/user/login" ) );
        QNetworkReply* reseau_retour = reseau_moteur->post( reseau_requete, dataPost.toLatin1() );
        QObject::connect( reseau_retour, SIGNAL(finished()), this, SLOT(resultat_post()) );
    }
    void Requete::resultat_post()	{   // Recuperation des coockies de session
        QNetworkReply* get = qobject_cast<QNetworkReply*>(sender());
        if( get->error()==QNetworkReply::NoError )	{
    	// La requete retourne bien les cookies recus dans liste_SetCookie
    	QList<QNetworkCookie> liste_SetCookie = QNetworkCookie::parseCookies( get->rawHeader( "Set-Cookie" ) );
    	bocal_cookie->setCookiesFromUrl( liste_SetCookie, get->url() );
    	// Aucun effet
    	reseau_moteur->setCookieJar( bocal_cookie );	
    	//
    	QNetworkRequest reseau_requete( QUrl( "http://www.developpez.com" ) );
    	// Petit test d'envoi avec qnetworkrequest qui ne change strictement rien
    	reseau_requete.setHeader( QNetworkRequest::CookieHeader, QVariant::fromValue<QList<QNetworkCookie> > (liste_SetCookie) );
    	//
    	QNetworkReply* reseau_retour = reseau_moteur->get( reseau_requete );
    	QObject::connect( reseau_retour, SIGNAL(finished()), this, SLOT(resultat_get()) );
        }
        get->deleteLater();
    }
    void Requete::resultat_get()	{
        QNetworkReply* get = qobject_cast<QNetworkReply*>(sender());
        if( get->error()==QNetworkReply::NoError )	{
    	QWebView *vue_web = new QWebView;
    	vue_web->setHtml( QString(get->readAll()) );
    	vue_web->show();
        }
        get->deleteLater();
    }

    Rien à faire la page est toujours lancé en invité...

    Je suis dessus depuis ce matin, je désespère de faire fonctionner mes sessions c'est pourquoi j'invoque votre expérience pour me venir en aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Finalement !
    J'ai testé mon code sur un autre site et, bizarrement, il fonctionne parfaitement...

    Il doit y avoir une manipulation plus ou moins complexe à effectuer selon le site internet.


    Qu'est ce qu'il manque, mis à part les cookies sessions, pour rester connecté sur ce site ?


    Je voudrais que mon programme fonctionne sur le site d'enchères ebay.
    Toutes les conseils et suggestions pour m'aider à avancer sont les bienvenus car je risque d'avoir du mal à m'en sortir tout seul.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 17
    Points : 12
    Points
    12
    Par défaut

    Il semblerait que ma galère émeuve peu de monde...

    J'ai continuer de chercher l'origine du problème,
    après avoir ajouter 2 fonctions tests que j'ai placé après la réception des cookies du post :

    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
     
    void Requete::test_affiche_headers(QNetworkReply* get)	{
        QList<QByteArray> m_listHeader = get->rawHeaderList();
     
        std::cerr<<"\n Nouvelle requete : \n";
     
        for(int i=0;i<m_listHeader.size();i++)
    	std::cerr<<QString(m_listHeader[i]).toStdString()<<" : "
    	<<QString(get->rawHeader(m_listHeader[i])).toStdString()<<std::endl;
    }
    void Requete::test_affiche_cookies()	{
        std::cerr<< "\n\n\t AFFICHE LA LISTE DU BOCAL A COOKIE (MIAM  :P) \n";
        QList<QNetworkCookie> liste_cook = bocal_cookie->cookiesForUrl(QUrl("http://developpez.com"));
     
        std::cerr<<"Liste des cookies :\n";
     
        for(int i=0; i<liste_cook.size(); i++)
    	std::cerr<<QString(liste_cook[i].name()).toStdString()<<" : "
    	<<QString(liste_cook[i].value()).toStdString()<<std::endl;
    }
    J'ai découvert qu'un seul cookie, le dernier uniquement, s'ajoutait à la liste du bocal_cookie.

    Donc j'ai fait ma petite recherche jusqu'à fatiguer ma cervelle anglophobe sur des forum anglophones.
    http://www.qtcentre.org/threads/2069...kies.../page2?

    D'après ce qu'ils disent cela viendrait d'un bug mis à jour depuis la version Qt 4.5.2
    Vu que ma version est la 4.6.2, je ne comprends pas pourquoi cela refuse de marcher chez moi.

Discussions similaires

  1. Réponses: 28
    Dernier message: 09/01/2007, 16h30
  2. Réponses: 3
    Dernier message: 09/01/2007, 09h44
  3. [2.0] Comment utiliser les variables de session ?
    Par batosai dans le forum ASP.NET
    Réponses: 11
    Dernier message: 03/05/2006, 15h49
  4. [XSL]Impossible d'utiliser les fonctions XPath 2.0
    Par cvmz dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/03/2006, 19h19
  5. Réponses: 5
    Dernier message: 22/03/2006, 14h54

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