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 :

[QNetworkAccessManager] Le slot authenticationRequired n'est pas appelé


Sujet :

Réseau

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Par défaut [QNetworkAccessManager] Le slot authenticationRequired n'est pas appelé
    Je vais créer une application qui est mentionné de se connecter à une instance de serveur sur owncloud, mais je ne trouve pas pourquoi il ne se connecte pas au serveur. Au lieu de cela la réponse je reçois est l'écran de connexion et j'obtiens le code html pour cela

    le code responsable de la connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //the network request and reply
              QNetworkAccessManager * manager = new QNetworkAccessManager();
              QUrl url (url1);
              manager->get(QNetworkRequest(url));
              connect(manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
                          SLOT(provideAuthenication(QNetworkReply*,QAuthenticator*)));
              connect(manager, SIGNAL(finished(QNetworkReply *)),
                      this, SLOT(result(QNetworkReply *)));
    le code qui reçoit la réponse:
    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
    void Login::result(QNetworkReply *reply)
    {
        reply->deleteLater();
     
         if(reply->error() == QNetworkReply::NoError) {
             // Get the http status code
             int v = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
             if (v >= 200 && v < 300) // Success
             {
                 qDebug()<<"Here we got the final reply";
                 QString replyText = reply->readAll();
                 qDebug()<<replyText;
             }
             else if (v >= 300 && v < 400) // Redirection
             {
                 qDebug()<<"Get the redirection url";
                 QUrl newUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
                 // Because the redirection url can be relative,
                 // we have to use the previous one to resolve it
                 newUrl = reply->url().resolved(newUrl);
     
                 QNetworkAccessManager *manager = reply->manager();
                 QNetworkRequest redirection(newUrl);
                 QNetworkReply *newReply = manager->get(redirection);
                 QString replyText = newReply->readAll();
                 qDebug()<<replyText;
                 return; // to keep the manager for the next request
             }
         }
         else
         {
             // Error
             qDebug()<<reply->errorString();
         }
     
         reply->manager()->deleteLater();
     }
    pourriez-vous m'aider à comprendre pourquoi je reçois l'écran de connexion au lieu de l'authentification?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Vérifie que l'orthographe de ton slot est correcte, parce qu'il semble qu'il manque un "t" à provideAuthenication dans le connect.

    Ensuite, il est peu probable que ça passe par l'authentification HTTP (mais je n'ai pas testé owncloud donc je peux me tromper). Je pense plutôt qu'il doit y avoir un formulaire à remplir, donc il "suffit" de regarder le code HTML de la page de connexion, faire la liste des champs dans la balise <form> (les attributs "name" des balises <input>) et les passer lors d'une requête POST, à la place de la requête get que tu as (l'url étant celle que tu a déjà, ou celle qui est indiqué dans l'attribut "action" du tag <form> si cet attribut est présent):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QUrl postData;
    postData.addQueryItem("user",  "xxx");
    postData.addQueryItem("password",  "xxx");
     
    networkManager->post(QNetworkRequest(url), postData.encodedQuery());
    Le serveur va également probablement utiliser les cookies pour gérer la session, donc il faudra réutiliser le même QNetworkAccessManager en conservant son adresse dans une variable membre de ta classe, par exemple, au lieu d'utiliser une variable locale.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Par défaut
    Désole mais votre réponse n'a rien résolu je reçoit encore la même réponse

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    J'ai oublié qu'il faut aussi passer le champ "Content-Type":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader,
                              "application/x-www-form-urlencoded");
    networkManager->post(request, postData.encodedQuery());
    Je viens de tester, et il y a aussi une redirection sur l'url de départ, au cas où il manque le "/" à la fin de l'url (ex: ça marche avec "http://localhost/owncloud/" mais pas avec "http://localhost/owncloud" qui renvoie à la page de login).

Discussions similaires

  1. [Framework] [AOP] L'aspect n'est pas appelé
    Par damien77 dans le forum Spring
    Réponses: 1
    Dernier message: 19/02/2009, 18h41
  2. La classe Installer n'est pas appelée
    Par alexandreb dans le forum C#
    Réponses: 5
    Dernier message: 06/07/2007, 16h35
  3. [AJAX] [Firefox] send n'est pas appelée tout le temps
    Par MademoiselleL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/07/2007, 16h16
  4. [débutant] la methode Validate() n'est pas appellée
    Par maxattack dans le forum Struts 1
    Réponses: 26
    Dernier message: 16/05/2007, 18h06
  5. [servlet][filtre] filtre qui n'est pas appelé
    Par felix79 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/06/2005, 21h09

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