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

Discussion :

Récupérer l'en-tête HTTP

  1. #1
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut Récupérer l'en-tête HTTP
    Bonjour,

    Je voulais savoir si on pouvait facilement recuperer l'entete d'une page web ?

    J'affiche une page, simplement comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QUrl adr = ui->lineEdit_4->text();
    ui->webView->load(QUrl(adr));
    Peut on faire quelque chose a partir de cela ?

    Merci D'avance,
    Tres cordialement,

    ANDRE Ani

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Tu veux récupérer l'entête de HTTP (le protocole) ou celle de la page HTML (le header) ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Jette un coup d’œil ici: http://qt.developpez.com/doc/4.7/qnetworkaccessmanager/

    il est possible avec le QNetworkReply renvoyé de lire les entêtes: http://qt.developpez.com/doc/4.7/qne...#rawheaderlist

  4. #4
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Je voudrais l'entete http, genre erreur 404, 200 ou autre.
    Je vais regarder qnetworkaccessmanager.

    Merci bien ;-)

  5. #5
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Je n'y arrive pas...
    Rien ne s'affiche, je ne sais même pas si je récupère quelque chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try {
        QUrl url = QUrl("http://www.veosearch.com");
        QNetworkRequest requete(url);
        QNetworkAccessManager *m = new QNetworkAccessManager;
        QNetworkReply *r = m->get(requete);
        QList<QByteArray> listHeaders;
        listHeaders = r->rawHeaderList();
        for(int i=0; i<listHeaders.size(); ++i){
            QString str(listHeaders[i].constData());
            QMessageBox::information(this,("Téléchargement"), ("Header : " + str));
        }
        connect(r, SIGNAL(finished()), this, SLOT(test));
    Ou est le problème avec ce code svp ?

    Merci d'avance,
    Très cordialement,

    ANDRE Ani

  6. #6
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Bon, ça avance un peu, mais c'est pas encore ça.

    Voila le code :

    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
     
            QUrl url("http://www.veosearch.com");
            QNetworkRequest requete(url);
            QNetworkAccessManager *m = new QNetworkAccessManager;
            QNetworkReply *r = m->get(requete);
            QEventLoop loop;
            QObject::connect(r, SIGNAL(finished()), &loop, SLOT(quit()));
            loop.exec();
     
            QList<QByteArray> listHeaders;
            listHeaders = r->rawHeaderList();
            for(int i=0; i<listHeaders.size(); ++i){
                QString str(listHeaders[i].constData());
                QMessageBox::information(this,("Information"), ("Header : " + str));
            }
    Tout ce que j'arrive a recuperer, c'est :

    date, server, set-cookie, vary, ...
    Est-ce normal ? Je ne peux pas recuperer les valeurs de ces variables ?

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Au point où t'en es, tu as vraiment encore besoin d'aide ? En regardant la doc de ce que tu as déjà fais, même sans connaitre, je n'ai pas pu louper les autres fonctions qui ressemblent mais qui permettent réellement de récupérer le contenu et non pas la liste des noms d'en-têtes : tu as rawHeader(), rawHeaderPairs(), ...

  8. #8
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Bon, j'ai enfin (merci) decouvert rawHeaderPairs, mais je n'arrive pas a m'en servir correctement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QList<QByteArray> listHeaders;
    listHeaders = r->QNetworkReply::rawHeaderPairs();
          for(int i=0; i<listHeaders.size(); ++i){
                 QString str(listHeaders[i].constData());
                 QMessageBox::information(this,("Information"), ("Header : " + str));
           }
    Erreur : erreur: no match for ‘operator=’ in ‘listHeaders = r->QNetworkReply::rawHeaderPairs()’

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    C'est sûr que ça ne risque pas de marcher.
    const QList<RawHeaderPair> & QNetworkReply::rawHeaderPairs () const
    Returns a list of raw header pairs.
    typedef QNetworkReply::RawHeaderPair
    RawHeaderPair is a QPair<QByteArray, QByteArray> where the first QByteArray is the header name and the second is the header.
    Il n'y a plus de QList<QByteArray> là-dedans.
    Le but, à mon avis, n'est pas que l'on te tape le code qui marche et que tu ne comprennes pas pourquoi, là tu as les éléments qu'il faut (peut-être un tour dans la doc de QPair pour savoir comment ça marche).

  10. #10
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Bien sur que je ne demande pas le code qui marche, ça ne sert a rien...

    Mais la, je pedale dans la semoule, je nage.

    J'abandonne pour le moment, meme si j'ai l'impression de pas etre bien loin.

    Merci pour tout.

  11. #11
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Si tu as des difficultés à comprendre ce que tu dois faire avec la "soluce" ci-dessus (la doc, quoi), je peux développer, de façon à ce que tu passes ce cap (pour cette fois et toutes les prochaines). Parce que comme je t'ai dit, je ne savais pas plus faire que toi, mais en lisant la doc par contre je sais faire. Si tu as des difficultés pour ça, on peut aider.

  12. #12
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Merci beaucoup, c'est sympa, je veux bien que vous developpiez alors, parce que la, je bloque... Et ça m'embete de ne pas comprendre...

  13. #13
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Problème :
    Tout ce que j'arrive a recuperer, c'est :

    date, server, set-cookie, vary, ...
    Est-ce normal ? Je ne peux pas recuperer les valeurs de ces variables ?
    Solution : D'après la doc, pour récupérer ces valeurs, on peut utiliser la fonction :
    const QList<RawHeaderPair> & QNetworkReply::rawHeaderPairs () const
    Returns a list of raw header pairs.
    Cette fonction renvoie une QList de RawHeaderPair. RawHeaderPair, qu'est-ce que c'est que ce truc :
    typedef QNetworkReply::RawHeaderPair
    RawHeaderPair is a QPair<QByteArray, QByteArray> where the first QByteArray is the header name and the second is the header.
    Ok, donc c'est bien une fonction qui peut nous servir, on a en gros une QList de QPair (liste de paires), avec des paires variables/valeur pour reprendre les termes du problème. Nous ce qu'on veut choper ce sont les valeurs, donc la seconde partie. Comment on l'obtient ? => doc de QPair
    Public Variables
    T1 first
    T2 second
    Voilà on a tout. Donc bouclons sur la liste de paires que la fonction rawHeaderPairs() nous retourne, et prenons les .second.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QList<RawHeaderPair> listHeaders ( r->rawHeaderPairs() ); // utilisation du constructeur plutôt que de l'opérateur =
    for ( int i = 0;  i < listHeaders.size(); ++i ) {
        QString str ( listHeaders[i].second.constData() ); // .second pour prendre la valeur ! listHeaders[i] étant la QPair - .constData() est-il nécessaire alors qu'un constructeur de QString prend directement un QByteArray en paramètre ?
        QMessageBox::information(this, ("Information"), ("Header : " + str)); // bizarre comme façon de l'écrire, mais j'ai copié collé, si ça marche...
    }

    Je n'ai absolument pas testé par contre, mais le compilateur nous aide à terminer si on a fait une boulette, et si j'ai fait des erreurs alors un plus expert peut me reprendre bien sûr. Mais c'est comme ça que je m'y prendrais.

  14. #14
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    ça marche enfin, juste en modifiant la première ligne de votre exemple (ce code, c'est ce que je faisais hier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QList<QNetworkReply::RawHeaderPair> listHeaders = r->rawHeaderPairs();
    C'est la déclaration de fonction que je faisais mal, j'ai enfin compris.

    Merci vraiment beaucoup pour votre aide et votre patience ;-)

  15. #15
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Ah oui exact, il faut l'espace de nom. Super alors

  16. #16
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Encore merci ;-)

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

Discussions similaires

  1. En têtes http
    Par gattous dans le forum Apache
    Réponses: 4
    Dernier message: 31/01/2008, 00h44
  2. [C#.NET 2.0] récupérer des fichiers par http
    Par cortex024 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 21/02/2007, 16h26
  3. Récupérer un SessionID par HTTPS via un script PHP
    Par porte33 dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 13h50
  4. récupérer l'en-tete HTTP
    Par sebhm dans le forum Langage
    Réponses: 6
    Dernier message: 19/11/2006, 15h55

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