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 :

[Qt 4.5] Proxy web


Sujet :

Qt

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut [Qt 4.5] Proxy web
    Bonjour,
    je suis en train de créer un proxy grâce à Qt.
    Donc je reçois le signal lorsque le navigateur se connecte au proxy.

    Mais je n'arrive pas à récupérer sa requête ...

    Voici mon 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Window::Window() : QWidget()
    {
        //...
     
        connect( m_server, SIGNAL( newConnection() ), this, SLOT( on_server_newConnection() ));
    }
     
    void Window::on_server_newConnection()
    {
        Client *newClient = new Client( m_server->nextPendingConnection() );
        m_clients << newClient;
     
        connect( newClient->socket(), SIGNAL( readyRead() ), this, SLOT( on_client_readyRead() ) );
        connect( newClient->socket(), SIGNAL( disconnected() ), this, SLOT( on_client_disconnected() ) );
    }
     
    void Window::on_client_readyRead()
    {
        QTcpSocket *socket = qobject_cast< QTcpSocket* >( sender() );
        if (socket == 0) // If sender not found
            return;
     
        QDataStream in( socket );
        QString msg;
        in >> msg;
     
        m_log->append( "Message length : " + QString::number( socket->bytesAvailable() ) + "<br />" + msg );
    }
    Je devrais voir s'afficher quelque chose ... et cependant il m'affiche :
    Message length : 0
    Comment récupérer la requête du navigateur ?

    Merci d'avance

  2. #2
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    Utilise QTextStream au lieu de QDataStream pour utiliser l'opérateur >> vers une QString. Sinon il faudrait lire le QDataStream avec readRawData.

    Ensuite socket->bytesAvailable() doit être appelé avant la lecture, sinon sa valeur aura diminué.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Merci pour ta réponse.

    Donc voici mon nouveau 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
    void Window::on_client_readyRead()
    {
        QTcpSocket *socket = qobject_cast< QTcpSocket* >( sender() );
        if (socket == 0) // If sender not found
            return;
     
        long available = socket->bytesAvailable();
        QTextStream in( socket );
        QString msg;
        in >> msg;
     
        m_log->append( "Message length : " + QString::number( available ) );
        m_log->append( msg );
        m_log->append( "Message length : " + QString::number( socket->bytesAvailable() ) );
    }
    Et la il m'affiche :
    Message length : 686
    GET
    Message length : 0
    C'est la seul requête qu'effectue le navigateur ?? :O

  4. #4
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    Citation Envoyé par Amybond Voir le message
    C'est la seul requête qu'effectue le navigateur ?? :O
    Le GET c'est juste le premier mot de ce que tu reçois et qui fait 686 octets. En fait operator>>(QString&) ne renvoie que le mot suivant du flux. Utilise plutôt readAll() ou readLine() selon ce que tu as besoin de faire.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Ok merci beaucoup

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/04/2014, 16h50
  2. Vulnérabilité d'un proxy Web avec authentification
    Par derick.khon dans le forum Sécurité
    Réponses: 0
    Dernier message: 21/11/2012, 12h16
  3. HTTPS, Proxy web, et tracabilité
    Par easyzik dans le forum Sécurité
    Réponses: 12
    Dernier message: 04/10/2010, 12h38
  4. Programmation d'un proxy Web
    Par sorry60 dans le forum Développement
    Réponses: 2
    Dernier message: 16/05/2009, 16h25
  5. Adaptation d'un script proxy web (Glype)
    Par colin.sauvanet dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 29/05/2008, 15h24

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