如何将JSON发送到PHP脚本并使用QT获得答案



我正在尝试与外部服务器进行通信,以查看程序的用户是否已有许可证,因此我必须使用机器ID将JSON发送到我的服务器在帐户中,我应该返回JSON内容,例如许可证的天数等信息,如果已付款等。

QNetworkAccessManager am;
QNetworkRequest request(QUrl("http://localhost/ives/webserver/serverrequest.php"));
request.setHeader(QNetworkRequest::UserAgentHeader, "IVarejo");
QJsonObject root;
root.insert("tipoRequest", QJsonValue::fromVariant("validacao"));
QJsonDocument sendDoc;
sendDoc.setObject(root);
QString json = sendDoc.toJson(QJsonDocument::Compact);
qDebug() << "JSON: " << json;
QNetworkReply *reply = am.post(request, json.toUtf8());
qDebug() << "Resultado: " << reply->readAll();

php脚本:

<?php 
    if(isset($_POST))
        echo json_encode($_POST);
?>

但是我得到一个空的答案,与浏览器不同时,我通过表格发送任何数据

JSON:  "{"tipoRequest":"validacao"}"
Resultado:  ""

之后
QNetworkReply *reply = am.post(request, json.toUtf8());

呼叫,您必须等待响应。

您可以通过两种方式进行操作:

waitforreadyread

reply->waitForReadyRead();
qDebug() << "Resultado: " << reply->readAll(); //now You can use readAll

或连接到ReadyRead信号 - QT 中的首选方式是,因为它不会阻止您的当前线程。

connect(reply, &QIODevice::readyRead, [reply](){
   qDebug() << "Resultado: " << reply->readAll();
});

在这里使用lambdas非常方便,但这不是必需的。您也可以将其连接到一个插槽。

还记得:

注意:请求完成后,用户有责任在适当的时间删除qnetworkreply对象。请勿将其直接删除在已连接到完成((的插槽中。您可以使用DeleteLater((函数。

相关内容

  • 没有找到相关文章

最新更新