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" (critiquez pas trop, c'est du vite fait car l'appli d'origine n'est pas écrite avec Qt)
Le contenu de la textEdit:Code: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"); } }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.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é
Si quelqu'un a des idées, merci d'avance.
PS: je ne récupère que la 1ère adresse renvoyée après résolution du nom car il n'y en a pas d'autre. mais je me doute que le problème vient de cette adresse.
-----