当前位置: 首页 > article >正文

qt http通信请求demo (get post )其余类似

CNetwork()
	{
		manager = new QNetworkAccessManager(this);
	}
void Get(const QString& url);
void Post(const QString& url_, const QByteArray &data_);
void handleGetReply();
void handlePostReply();

QNetworkAccessManager* manager;

头文件里面先来个get和post以及处理他们返回值的函数的函数声明和QNetworkAccessManager管理类的初始化

接下来看看具体函数实现

void CNetwork::Get(const QString& url_)
{
	// 创建URL对象
	QUrl reqUrl(url_);
	// 发起GET请求
	QNetworkReply* reply = manager->get(QNetworkRequest(reqUrl));
	// 关联信号和槽,用于处理请求完成后的情况
	connect(reply, &QNetworkReply::finished, this, &CNetwork::handleGetReply);
}

void CNetwork::Post(const QString& url_, const QByteArray &data_)
{
	QUrl reqUrl(url_);
	QNetworkRequest request(reqUrl);
	request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); // 设置Content-Type为JSO
	QNetworkReply *reply = manager->post(request, data_);
	// 关联信号和槽,用于处理请求完成后的情况
	connect(reply, &QNetworkReply::finished, this, &CNetwork::handlePostReply);
}



void CNetwork::handleGetReply()
{
	QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
	if (reply) {
		if (reply->error() == QNetworkReply::NoError) {
			// 获取响应的数据(这里假设获取文本内容)
			obs = reply->readAll();
		}
		// 释放reply对象相关资源
		reply->deleteLater();
	}
}

void CNetwork::handlePostReply()
{
	QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
	if (reply)
	{
		if (reply->error() == QNetworkReply::NoError) {
			// 获取响应的数据(这里假设获取文本内容)
			QByteArray data = reply->readAll();
			// 打印HTTP状态码
			int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
			qDebug() << "HTTP Status Code: " << statusCode;

			// 如果需要解析JSON数据,可以这样做
			QJsonDocument jd = QJsonDocument::fromJson(data);
			if (!jd.isNull())
			{
				handleJsonobject(jd.object());
			}
			reply->deleteLater();
		}
		else {
			// 如果有错误,打印错误信息
			qDebug() << "Error:" << reply->errorString();
		}
		// 释放reply对象相关资源
		reply->deleteLater();
	}
}

好了,已经完成了。


http://www.kler.cn/a/430469.html

相关文章:

  • OpenHarmony通过挂载镜像来修改镜像内容,RK3566鸿蒙开发板演示
  • Vue2: table加载树形数据的踩坑记录
  • C++ 设计模式:备忘录模式(Memento Pattern)
  • 数据可视化分析详解
  • C# 设计模式的六大原则(SOLID)
  • 使用连字符容易出错,尽量使用驼峰式的
  • Unity类银河战士恶魔城学习总结(P171 After image fx残影)
  • 基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯
  • 在 OAuth 2.0 中,refreshToken(刷新令牌)存在的意义
  • 新浪财经-数据中心-基金重仓GU-多页数据批量获取
  • HarmonyOS-中级(三)
  • BERT:用于语言理解的深度双向 Transformer 的预训练。
  • SQLAlchemy: Python中的强大数据库工具
  • 线段树模板
  • 微服务架构之旅-消息队列的应用
  • 鸿蒙分享(二):引入zrouter路由跳转+封装
  • 【git】git合并分支功能rebase和merge的区别
  • HarmonyOS-中级(四)
  • 中国卫生健康统计年鉴Excel+PDF电子版2022年-社科数据
  • 【Android Studio】学习——网络连接
  • 如何判断一个值是否是数组
  • QT requested database does not belong to the calling thread.线程中查询数据报错
  • OpenCV相机标定与3D重建(10)眼标定函数calibrateHandEye()的使用
  • go语言的成神之路-标准库篇-fmt标准库
  • 力扣刷题TOP101: 27.BM34 判断是不是二叉搜索树
  • Erlang/OTP绿色版安装和RabbitMQ绿色版安装