【Qt】Qt 使用HTTP协议

1、使用Qt的HTTP向OneNet发送数据
参考链接:https://blog.csdn.net/lmhuanying1012/article/details/78423388
https://www.cnblogs.com/Travis990/p/4483538.html
https://blog.csdn.net/u012365926/article/details/51920176

form格式访问服务器

QByteArray postArray;
postArray.append("grant_type=authorization_code");
postArray.append("&client_id=32u2w95f200D4d27");
postArray.append("&client_secret=37vH35Eg028P2HZz");
postArray.append("&redirect_uri=http://www.163.com");
postArray.append("&code=128a55c1249ebf3ef9d154b72a5386d4");

QNetworkRequest request(QUrl("http://kk.bigk2.com:8080/KOAuthDemeter/accessToken"));
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
request.setHeader(QNetworkRequest::ContentLengthHeader,postArray.size());
manager->post(request,postArray);



json格式访问服务器

 QUrl url("http://kk.bigk2.com:8080/KOAuthDemeter/User/getKSceneList");
QByteArray array("{\"userid\":\"1538822184@qq.com\"}");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
request.setRawHeader("Authorization","Bearer 49152bfddae0c5b5d492d3d9871f8c11");//服务器要求的数据头部
manager->post(request,array);
要从OneNet平台获取某个数据点,您需要使用HTTP协议OneNet API发送请求。具体步骤如下: 1.首先,您需要获取该设备的设备ID和API Key。您可以在OneNet平台上创建一个设备,并从设备管理页面中获取这些信息。 2.然后,您需要构造HTTP请求,向OneNet API发送请求,以获取特定数据点的值。您可以使用以下URL格式: ``` http://api.heclouds.com/devices/{device_id}/datastreams/{datastream_id} ``` 其中,{device_id}是您的设备ID,{datastream_id}是您要获取的数据流ID。 3.您需要在HTTP请求头中包含您的API Key,以进行身份验证。您可以将API Key添加到HTTP头中的Authorization字段中,如下所示: ``` Authorization: apikey {your_api_key} ``` 4.发送HTTP请求,并等待OneNet API的响应。您可以使用C++的Qt网络模块中的QNetworkAccessManager类来发送HTTP请求,并处理响应。以下是一个简单的示例: ```cpp QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onReplyFinished(QNetworkReply*))); QString url = QString("http://api.heclouds.com/devices/%1/datastreams/%2").arg(deviceId).arg(datastreamId); QNetworkRequest request(url); request.setRawHeader("Authorization", QString("apikey %1").arg(apiKey).toUtf8()); manager->get(request); ``` 在这个示例中,我们使用Qt的信号槽机制,将QNetworkAccessManager的finished()信号连接到一个槽函数onReplyFinished()上。当OneNet API响应时,该槽函数将被调用,并传递一个QNetworkReply对象作为参数。 5.在onReplyFinished()函数中,您可以使用QNetworkReply对象来获取OneNet API的响应,并解析响应中包含的数据流值。以下是一个简单的示例: ```cpp void MyClass::onReplyFinished(QNetworkReply *reply) { if (reply->error() != QNetworkReply::NoError) { // 处理请求错误 return; } QByteArray data = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(data); QVariantMap map = doc.toVariant().toMap(); QVariantMap datastream = map.value("data").toMap(); QVariant value = datastream.value("current_value"); qDebug() << "Current value:" << value.toString(); } ``` 在这个示例中,我们首先检查响应是否有错误。如果没有错误,我们将响应数据读入QByteArray对象中,并将其转换为QJsonDocument对象。然后,我们将QJsonDocument转换为QVariantMap对象,并从中提取数据流值。最后,我们使用QDebug输出当前值。 这就是从OneNet平台获取某个数据点的基本步骤。请注意,您需要根据自己的具体情况来修改示例代码,以适应您的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖恭伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值