使用到中重要的类,做个简单的介绍
QNetworkAccessManager:这个类是QT帮我们封装好的工具类,主要可以用来发送Http请求QNetworkReply:这个类主要用来监听发送的请求,并得到请求的响应结果QHttpMultiPart:这个类主要用于封装post请求的二进制参数的数据QEventLoop:这个类是一个控制事件QJsonDocument:这个类用于解析JSON
头文件:
- #ifndef HTTPTEST_H
- #define HTTPTEST_H
-
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
//以下是json数据传送所需头文件 - #include
- #include
- #include
- #include
- #include
-
-
-
-
- class myHttp : public QObject
- {
- Q_OBJECT
-
- public:
- explicit myHttp(QObject *parent = nullptr);
- void sendGetRequest();
- void sendPostRequest();
- QString resultGet;
- QString resultPost;
-
-
-
-
- public slots:
- void receiveReplyGet(QNetworkReply *reply);
- void receiveReplyPost(QNetworkReply *reply);
-
-
- };
-
-
-
- #endif // HTTPTEST_H
cpp文件
- #include "myHttp.h"
-
- myHttp::myHttp(QObject *parent) : QObject(parent)
- {
-
- }
-
- void myHttp::sendGetRequest()
- {
-
- qDebug()<<"get方法被执行";
- QNetworkRequest request1;
- QNetworkAccessManager nam;
- connect(&nam, &QNetworkAccessManager::finished, this, &myHttp::receiveReplyGet);
-
- //get与post的请求方式有所不同,get是在接口名后添加 ? 和传输的数据(type)
- request1.setUrl(QUrl("http://localhost:8080/dish/page?hello=666&name=hjl&age=18"));
- request1.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json;charset=utf-8"));
- QString token = "xxxxxxxxxxxxxxxxxxxxxxxx";
- QString token_headerData = token;
- request1.setRawHeader("token",token_headerData.toLocal8Bit());
- QNetworkReply *reply = nam.get(request1); //get请求头
-
- //开启事件循环,直到请求完成
- QEventLoop loop;
- connect(reply,&QNetworkReply::finished,&loop,&QEventLoop::quit);
- loop.exec();
-
- }
-
- void myHttp::receiveReplyGet(QNetworkReply *reply)
- {
- qDebug()<<"得到get方法的返回值";
- // 获取状态码
- int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
- // 获取响应数据
- QString reply_data = reply->readAll();
- qDebug()<
- resultGet=reply_data;
-
-
- //解析json字符串
- QJsonDocument jsonDoc = QJsonDocument::fromJson(reply_data.toUtf8());
- QJsonObject jsonObj = jsonDoc.object();
-
- QString date = jsonObj["date"].toString();
- int code = jsonObj["code"].toInt();
- QString msg = jsonObj["mes"].toString();
-
- qDebug()<
-
-
- }
-
-
-
- void myHttp::sendPostRequest()
- {
- qDebug()<<"post方法被执行";
-
- QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
- //封装文本参数
- QHttpPart textPart;
- textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=text"));
- textPart.setBody("text");
-
-
- //封装文件参数
- QHttpPart filePart;
- filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=file; filename=output.wav"));
- QString filename="F:\\output.wav";
- QFile file(filename);
- QByteArray bytes;
-
- if (!file.exists()) {
- qDebug() << "文件不存在";
- return;
- }
-
- if (file.open(QFile::ReadOnly)) {
- bytes = file.readAll();
- qDebug() << "状态:读取文件成功";
- }
- file.close();
- filePart.setBody(bytes);
- qDebug()<
size(); -
-
- //将封装到的参数加入到这个对象中
- multiPart->append(textPart);
- multiPart->append(filePart);
-
-
-
- QUrl url("http://localhost:8080/common/upload?age=18&hobby=football");
- QNetworkRequest request(url);
- request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("multipart/form-data; boundary="+multiPart->boundary()));
-
- QNetworkAccessManager manager;
-
- connect(&manager, &QNetworkAccessManager::finished, this, &myHttp::receiveReplyPost);
- QNetworkReply *reply = manager.post(request, multiPart);
-
-
-
- //开启事件循环,直到请求完成
- QEventLoop loop;
- connect(reply,&QNetworkReply::finished,&loop,&QEventLoop::quit);
- loop.exec();
-
-
- }
-
- void myHttp::receiveReplyPost(QNetworkReply *reply)
- {
- qDebug()<<"post方法返回";
- // 获取状态码
- int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
- // 获取响应数据
- QString reply_data = reply->readAll();
- resultPost=reply_data;
-
-
- //解析json字符串
- QJsonDocument jsonDoc = QJsonDocument::fromJson(reply_data.toUtf8());
- QJsonObject jsonObj = jsonDoc.object();
-
- QString date = jsonObj["data"].toString();
- int code = jsonObj["code"].toInt();
- QString msg = jsonObj["msg"].toString();
-
- qDebug()<
-
- }
-
-
-
-
效果:

最后,如有不足欢迎指正,如有疑问,欢迎评论
-
相关阅读:
Win11环境Mecab日语分词和词性分析以及动态库DLL not found问题(Python3.10)
webpack优化篇(四十八):使用 Tree Shaking 擦除无用的 JavaScript 和 CSS
数据挖掘经典十大算法_NaiveBayes朴素贝叶斯
Linux进程间通信模式
怎么将本地代码文件夹通过Git 命令上传到启智平台仓库
【数值优化之凸集】
双指针算法解决 移动零 和 复写零问题
【教3妹学mysql】一条慢sql如何排查优化
mysql 如何向数据库中插入特殊字符“ ’ &等等符号
前端渲染后端返回的HTML格式的数据
-
原文地址:https://blog.csdn.net/weixin_45533131/article/details/133211215
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU