一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

在做一个有关agv小车的项目,需要自编qt程序连接服务器获取数据,http请求类型为post,发送的数据类型为json。稍微在网上搜一下,就可以找到千变一律的代码,直接粘过来用就可以了。但调试了一下午,就是获取不了数据,而用postman调试却可以获得正常的数据,输出的错误如下所示:

1 Error warning:  "Network access is disabled."
2 QIODevice::read (QDisabledNetworkReply): device not open

 看了qt的QNetworkReply官方文档、查遍了国内外网站也没查出个啥,直到最后在官网上看了QNetworkAccessManager的详解文档。唉,有点意思,和我的错误挺接近,粘过来试试,没想到成了。

 总结,针对上述错误的解决方法就是在QNetworkAccessManager初始化后加入如下代码:

net_mgr->setNetworkAccessible(QNetworkAccessManager::Accessible);

为了实现类似Python的post请求,我封装了一个如下的函数,可以直接返回想要获取的json数据:

复制代码
 1 QJsonObject WebTest::getJsonObject(QString url, QJsonObject object)
 2 {
 3     QJsonDocument document = QJsonDocument(object);
 4     QByteArray post_data = document.toJson(QJsonDocument::Compact);
 5 
 6     //构造请求
 7     QNetworkRequest net_request;
 8     net_request.setUrl(QUrl(url));
 9     //请求头:其中 Content-Type 指定了客户端发送的内容格式。例如:Content-Type: application/json,指客户端发送的内容格式为 Json
10     net_request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));//QVariant("application/json;charset=UTF-8")
11 
12     QNetworkAccessManager netManager(this);
13     netManager.setNetworkAccessible(QNetworkAccessManager::Accessible);
14     QNetworkReply * reply = netManager.post(net_request, post_data);
15 
16     QEventLoop eventLoop;
17     connect(&netManager, &QNetworkAccessManager::finished, &eventLoop, &QEventLoop::quit);
18     eventLoop.exec();
19 
20 
21     QByteArray bytes = reply->readAll();
22     qDebug() << "Receive data:" << bytes;
23 
24     QJsonObject jsonObject = QJsonDocument::fromJson(bytes).object();
25     reply->deleteLater();
26 
27     return jsonObject;
28 }
复制代码

使用范例:

复制代码
1 QString agvIP = "http://192.168.7.254/v1/mobile_platform_send";
2 QJsonObject object1;
3 object1.insert("token", token);
4 object1.insert("id", 1);
5 
6 QJsonObject objectRecei = getJsonObject(agvIP, object1);
7 //然后从objectRecei中提取想要的数据 
复制代码

最后附上postman的一张使用说明

posted on   一杯清酒邀明月  阅读(1031)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示