Я пытаюсь подключиться к странице 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");
?>
Ваш текущий 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();
}
Других решений пока нет …