Qt:发送数据到服务器

Qt: Post data to server

本文关键字:服务器 数据 Qt      更新时间:2023-10-16

我尝试实现一个REST客户端,以便从我的服务器获得一个服务票据。对于那些不知道CAS的人:可以通过出示TGT来申请服务票。TGT基本上可以通过成功登录请求。也许这根本不相关。

我想我的连接有一个错误。我的服务器甚至没有对该连接作出反应,并且回复为空。然而,由于某种原因,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;
}

EDIT: replyFinished as requested

. h:

public slots:
     void replyFinished(QNetworkReply *);

. cpp:

void CCASRESTClient::replyFinished(QNetworkReply *reply)
{
    QByteArray replyData = reply->readAll();
    serviceTicket = QString::fromAscii(replyData.data());
}

当应答从服务器到达时,事件循环调用槽replyFinished,这发生在您的函数validateTGT返回之后很远的地方。

manager对象接收到应答,然后发出finished信号,此时调用槽位replyFinished。从那里返回值是没有意义的。只要问问你自己,谁是调用函数,将得到这个返回值? validateTGT已经返回,因此它没有得到任何东西。

您的插槽需要声明为返回void,并且您应该对replyFinished插槽中的回复做任何您想做的事情。

通常,如果您有任何返回值的槽,则无法检索返回值,除非将该槽作为普通函数调用(显然这里不是这种情况)。

相关文章: