Ich versuche einen REST-Client zu implementieren, um ein Service Ticket von meinem Server zu bekommen. Für diejenigen von Ihnen, die CAS nicht kennen: Ein Service Ticket kann angefordert werden, indem man ein TGT zeigt. Das TGT kann grundsätzlich durch eine erfolgreiche Anmeldung angefordert werden. Vielleicht ist das nicht einmal relevant.Qt: Daten an den Server senden
Ich quess Ich habe einen Fehler in meiner Verbindung. Mein Server reagiert nicht einmal auf diese Verbindung und die Antwort ist leer. Aus irgendeinem Grund ist reply->error() == QNetworkReply::NoError
jedoch wahr.
Was mache ich falsch?
bool Client::validateTGT(QString const & tgt) const
{
bool isValid = false;
QUrl url = QUrl("https://localhost:8943/cas/v1/tickets/" + tgt);
QUrl postData;
postData.addQueryItem("service", "https://test.de");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
//QNetworkAccessManager *networkManager = new QNetworkAccessManager();
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)), Qt::AutoConnection);
QNetworkReply *reply = manager->post(request, postData.encodedQuery());
QByteArray replyData = reply->readAll();
QString s_data = QString::fromAscii(replyData.data());
if (reply->error() == QNetworkReply::NoError)
{
isValid = true;
}
return isValid;
}
EDIT:replyFinished
wie gewünscht
.h:
public slots:
void replyFinished(QNetworkReply *);
CPP:
void CCASRESTClient::replyFinished(QNetworkReply *reply)
{
QByteArray replyData = reply->readAll();
serviceTicket = QString::fromAscii(replyData.data());
}
Sie sollten 'reply-> readAll()' im 'replyFinished'-Slot aufrufen, nicht direkt nach Anforderung. Netzwerkanforderungen in Qt sind asynchron. Versuchen Sie, Qt-Dokumentation und Beispiele zu lesen. Da ist alles klar. –
Danke. Ich habe es versucht, aber "replyFinished" wird nicht einmal aufgerufen. – Goldi
@DennisvonEich, ich denke, dass Sie den Code, wo Sie die 'readAll()' in den 'replyFinished'-Steckplatz haben sollten, da dieser Code offensichtlich falsch ist. Vielleicht hast du dort einen Fehler gemacht. – Mike