QT QNetworkReply и переполнение стека

Я пытаюсь подключиться к странице php.

не важно, что я делаю, но QNetworkReply всегда пуст.

это мой код, надеюсь, у кого-то есть идея.

QUrl url("http://mysite.it/interface.php");
QNetworkRequest request(url);

request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QUrlQuery params;
//list of paramsurl.setQuery(params);
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *)));

manager->post(request,params.toString(QUrl::FullyEncoded).toUtf8());

connect(this, SIGNAL(confirm_signal()), reciver, SLOT(recive_confirm()));

это слот для ответа

    void database::replyFinished(QNetworkReply *reply){
if(reply->error())
{
qDebug() << "ERROR!";
qDebug() << reply->errorString();

}
else {
qDebug()<< reply->readAll().toInt();
qDebug()<< reply->readAll().trimmed();
QByteArray array = reply->readAll();
QString str(array);
reply->deleteLater();
qDebug() << "array" <<array;
qDebug() <<"string" <<str;

QString str2 = QString::fromUtf8(array.data(), array.size());

qDebug() <<str2;
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << QVariant(statusCode).toString();
emit confirm_signal();
}
}

все qDebug () выдает «» в качестве ответа, за исключением кода состояния «200».

<?php
json_encode("Ok");
?>

0

Решение

Ваш текущий interface.php код ничего не выводит, он просто вычисляет строку JSON (и отправляет ее обратно), вы должны использовать echo,

<?php
echo json_encode("Ok");
?>

Редактировать: Есть еще одна ошибка в вашем replyFinished слот, когда вы звоните readAll, текущие доступные данные в устройстве возвращаются. И в следующий раз, когда вы позвоните, будут возвращены только новые доступные данные.

Итак, делая qDebug()<< reply->readAll().toInt(); вы читаете доступные на данный момент данные и нигде не сохраняете их, вы просто конвертируете их в целое число (что невозможно сделать, так как данные "Ok" а также toInt() возвращает 0), а следующий readAll() возвращает пустое QByteArray поскольку "Ok" был прочитан в предыдущем звонке, я думаю, что вы хотели написать это:

else {
QByteArray array = reply->readAll();
qDebug()<< array.toInt();
qDebug()<< array.trimmed();
QString str(array);
reply->deleteLater();
qDebug() << "array" <<array;
qDebug() <<"string" <<str;

QString str2 = QString::fromUtf8(array.data(), array.size());

qDebug() <<str2;
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << QVariant(statusCode).toString();
emit confirm_signal();
}
2

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

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

По вопросам рекламы [email protected]