我尝试实现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