我正在尝试连接到一个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 params
url.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();
}
}除了状态代码"200“之外,所有qDebug()都给出了"”作为答案。
<?php
json_encode("Ok");
?>发布于 2016-06-05 11:48:36
您当前的interface.php代码没有输出任何内容,它只是计算JSON字符串(并将其发回),您必须使用echo。
<?php
echo json_encode("Ok");
?>编辑:--您的replyFinished插槽中还有另一个错误,当您调用readAll时,将返回设备中当前可用的数据。下一次调用它时,只返回新的可用数据。
因此,通过执行qDebug()<< reply->readAll().toInt();,您正在读取当前可用的数据,并且没有将其保存到任何地方,只需将其转换为int (由于数据为"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();
}https://stackoverflow.com/questions/37632308
复制相似问题