我嘗試實現REST客戶端,以便從我的服務器獲取服務票據。對於那些不瞭解CAS的人:可以通過顯示TGT來請求服務票。基本上可以通過成功登錄來請求TGT。也許這甚至不相關。Qt:將數據發佈到服務器
我不知道我在連接中遇到錯誤。我的服務器甚至沒有對該連接作出反應,並且回覆是emptry。但由於某種原因,reply->error() == QNetworkReply::NoError
是正確的。
我在做什麼錯?
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;
}
編輯:replyFinished
作爲請求
.H:
public slots:
void replyFinished(QNetworkReply *);
的.cpp:
答覆時void CCASRESTClient::replyFinished(QNetworkReply *reply)
{
QByteArray replyData = reply->readAll();
serviceTicket = QString::fromAscii(replyData.data());
}
您應該在請求後直接在'replyFinished'插槽中調用'reply-> readAll()'。 Qt中的網絡請求是異步的。嘗試閱讀Qt文檔和示例。一切都很清楚。 –
謝謝。我試過這個,但是'replyFinished'甚至沒有被調用。 – Goldi
@DennisvonEich,我認爲你應該在'replyFinished'插槽中有'readAll()'的地方發佈代碼,因爲這段代碼顯然是錯誤的。也許你在那裏犯了一些錯誤。 – Mike