2016-10-06 151 views
-1

我尝试实现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()); 
} 
+0

您应该在请求后直接在'replyFinished'插槽中调用'reply-> readAll()'。 Qt中的网络请求是异步的。尝试阅读Qt文档和示例。一切都很清楚。 –

+0

谢谢。我试过这个,但是'replyFinished'甚至没有被调用。 – Goldi

+0

@DennisvonEich,我认为你应该在'replyFinished'插槽中有'readAll()'的地方发布代码,因为这段代码显然是错误的。也许你在那里犯了一些错误。 – Mike

回答

3

replyFinished由事件循环称为已经从服务器到达了s发生在您的功能validateTGT已返回。

manager对象接收应答,然后发射finished信号,这是当槽replyFinished被调用。从那里返回一个值是没有意义的。请问自己,谁是会得到这个返回值的调用者函数?validateTGT已经返回,因此它没有得到任何东西。

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

一般来说,如果你有任何插槽返回一个值,除非这个插槽被作为普通函数调用(显然这里不是这种情况),否则返回值不能被检索。

+0

我现在编辑了我的代码。这是可编译的。我改变了返回到'void'。现在我将数据设置为'QString'。但是,'serviceTicket'是空的。 – Goldi

+0

@DennisvonEich,你确定答复不是真的空吗? 'qDebug()<< replyData'给你什么? – Mike

+0

我工作的系统关闭,直到明天。我明天可以继续工作。再次感谢你的帮助。我将在明天回复 – Goldi