2016-10-06 207 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