Qt: публиковать данные на сервере

Я пытаюсь внедрить REST-клиент, чтобы получить Service Ticket от моего сервера. Для тех из вас, кто не знает, 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;
}

РЕДАКТИРОВАТЬ: replyFinished как просили

.час:

public slots:
void replyFinished(QNetworkReply *);

.каст:

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

-1

Решение

Слот replyFinished вызывается циклом событий, когда ответ поступил с сервера, это происходит далеко после вашей функции validateTGT вернулся.

manager объект получает ответ и затем испускает finished сигнал, это когда слот replyFinished называется. Возвращать значение оттуда не имеет смысла. Просто спроси себя, кто является вызывающей функцией, которая получит это возвращаемое значение? validateTGT уже вернулся, поэтому ничего не получает.

Ваш слот должен быть объявлен для возврата voidи вы должны делать все, что вы хотите сделать с ответом в вашем replyFinished слот.

В общем, если у вас есть слот, который возвращает значение, возвращаемое значение не может быть получено, если этот слот не был вызван как нормальная функция (очевидно, это не тот случай).

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector