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 :

Appeler un script PHP


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut Appeler un script PHP
    Bonjour,

    j'ai une application web constituée d'une base de données et d'un site web qui communique avec cette base. J'ai également une application locale (raspberry Pi) qui a besoin d'écrire dans la base de données. L'application est écrite en C++.
    Comme le site est situé chez un hébergeur externe, les requêtes sql directes sont bloquées et mon appli va donc effectuer des requêtes http qui vont appeler le script updateDB.php situé à la racine du site.

    Lorsque je teste le tout avec le serveur web situé dans mon réseau local, tout fonctionne parfaitement. En revanche, si j'utilise le site distant, ma requête n'est pas comprise. J'ai essayé en C++ avec gestion "classique" des sockets (socket.h), puis avec Qt, avec le même résultat.

    Je joins la fonction de test qui récupère url et port dans une "lineEdit" et affiche ce que renvoie le serveur dans une "textEdit"
    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
    void client::connexion(){
        ip = ui.lineEditIP->text();                
        port = ui.lineEditPort->text().toInt();    
     
     
        // Création de la socket *********************************************
        socket = new QTcpSocket(this);
     
     
        //Résolution de l'adresse du serveur *********************************
        QHostInfo info = QHostInfo::fromName(ip);
        if (!info.addresses().isEmpty()) 
            ip = info.addresses().first().toString();
        ui.textEdit->append(ip);
     
        // Connexion au serveur http *****************************************
        socket->connectToHost(ip, port);
     
     
        // Attente de la réponse du serveur **********************************
        if (socket->waitForConnected(100)) {    // On attend 100 ms maxi
            ui.textEdit->append("*** Connecté");// si la connexion est acceptée, on l'affiche
            socket->write("GET /updateDB.php?temp=21.32&ph=5.3 HTTP/1.0\r\n\r\n");
            socket->waitForBytesWritten(1000);    // on attend que toutes les données soient bien envoyées
     
     
            // Lecture des données renvoyées par le serveur
            socket->waitForReadyRead(3000);        // et on attend 3 secondes maxi la réponse du serveur
            ui.textEdit->append("*** Lecture en cours ...");
            QString ch = socket->readAll();        // Récupération des données envoyés par le serveur
            ui.textEdit->append(ch);            // Affichage de ces données
     
     
            // Fermeture de la connexion *****************************************
            socket->close();                    // On termine la connexion
            ui.textEdit->append("*** Déconnecté");
        }
        else {
            ui.textEdit->append("Connexion impossible");
        }
     
    }
    Le contenu de la textEdit:
    46.105.57.169
    *** Connecté
    *** Lecture en cours ...
    HTTP/1.1 400 Bad Request
    Date: Tue, 28 Feb 2017 14:59:35 GMT
    Content-Type: text/html; charset=iso-8859-1
    Content-Length: 226
    Connection: close
    Server: Apache
    Vary: Accept-Encoding
    Set-Cookie: SERVERID585=202157|WLWQW|WLWQW; path=/


    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>400 Bad Request</title>
    </head><body>
    <h1>Bad Request</h1>
    <p>Your browser sent a request that this server could not understand.<br />
    </p>
    </body></html>


    *** Déconnecté
    Pour moi, c'est un problème d'adresse IP car si j''entre l'url du site dans mon navigateur, je vois la liste des fichiers, alors que si j'entre l'adresse IP correspondante, je tombe sur une page de login de mon hébergeur.

    Si quelqu'un a des idées, merci d'avance.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Pourquoi utilises-tu un socket pour ça ? Qt peut directement envoyer des requêtes HTTP via QNetworkAccessManager (ou QHttp avec Qt 4, mais cette classe n'existe plus avec Qt 5). Par exemple, voir http://tcuvelier.developpez.com/tuto...elechargement/ Ça pourrait résoudre tes problèmes de requête mal formée.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    Merci pour ta réponse.

    En effet, je viens de voir ces classes. Mais le programme Qt était juste un test rapide que j'ai effectué sur mon portable. L'application finale tourne sur une raspberry pi et je préfèrerais éviter de devoir chager Qt dessus puis de réécrire tout le reste de l'ppli qui tourne déjà.

    Jesuis en train de voir ce qui existe du côté de boost, avec cette lib en particulier: http://cpp-netlib.org/0.12.0/index.html

    Mais comme d'hab, l'install foire avant la fin. Je creuse.

    Si rien ne va, je tenterai avec Qt.

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    Problème résolu.

    Création de la socket avec l'adresse de l'hébergeur
    Il fallait ensuite formuler la requête différemment, ce qui est permis avec HTTP/1.1

    GET /updateDB.php?etc.
    Host: adresse de mon site

    Merci à ceux qui ont passé un peu de temps à chercher.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/11/2007, 14h37
  2. Réponses: 8
    Dernier message: 08/06/2007, 21h39
  3. Appeler un script PHP toutes les x minutes
    Par Seb33300 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/02/2007, 14h41
  4. appel de script php a distante avec envoie de variable
    Par xtaze dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/05/2006, 15h53
  5. Réponses: 6
    Dernier message: 23/05/2005, 08h33

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