Bonjour tout le monde,
J'ai développé une application qui se connecte à un serveur distant, envoi un service web et récupère les données.
Pour se connecter au serveur et invoquer le service Web j'ai utilisé
J'ai implémenté la fonction receive qui se déclenche avec le slot requestfinished(int, bool) :
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 void Connexion::connectToWebService(QString host, quint16 port, QString path, vector <QStringList> paramsList) { // formater la chaine à envoyer QString params; int i = 0; int listParamSize = paramsList.size()-1; while(i <= listParamSize){ if(0 < i){ params += "&"; } params += QString(paramsList[i].at(0).toLocal8Bit().constData())+"="+QUrl::toPercentEncoding(QString(paramsList[i].at(1).toLocal8Bit().constData())); ++i; } //invoquer le service web this->http.clearPendingRequests(); QHttpRequestHeader header("POST", path); header.setValue("HOST", host); header.setValue("Cache-Control", "no-cache"); header.setContentType("application/x-www-form-urlencoded"); header.setContentLength(params.length()); this->http.setHost(host); this->idVerify = this->http.request(header, params.toUtf8()); this->http.closeConnection();Le code de la fonction receive est
Code : Sélectionner tout - Visualiser dans une fenêtre à part connect(&http, SIGNAL(requestFinished(int, bool)), this, SLOT(receive(int, bool)));Mon problème réside dans le fait que si j'ai une erreur dans le résultat récupéré, la fonction startApplication affiche un message d'erreur. Si j'attends un certain temps, l'application entre de nouveau dans la fonction receive mais cette fois, la variable result est vide et la fonction startApplication affiche un autre message. Si je clique sur ces 2 messages, l'application se plante et j'ai une erreur comme indiqué dans le PJ
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 void Connexion::receive(int id, bool error) { if(error) { qDebug() << http.errorString(); this->result = http.errorString(); } else { if(id == this->idVerify ) { QTextCodec *textCodec = QTextCodec::codecForName("utf-8"); QString res = textCodec->toUnicode(this->http.readAll()); QDomDocument doc; doc.setContent(res); QDomElement docElem = doc.documentElement(); result = docElem.text(); // fonction à appeler après reception données startApplication(); } } }
Est ce que quelqu'un a une idée sur ce problème et pourra me venir en aide.
Merci d'avance.
Bien cordialement.
Partager