在Qt中使用http的get和post请求

如何在Qt中发送get和post请求

简单介绍

超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。

HTTP 的工作方式是客户端与服务器之间的请求-应答协议。

web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。

举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。

两种 HTTP 请求方法:GET 和 POST
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据。
GET 提交参数一般显示在 URL 上,POST 通过表单提交不会显示在 URL 上,POST 更具隐蔽性:

准备工作

你需要现在工程中加入Network相关内容

CMake示例:

1
2
find_package(Qt6 COMPONENTS Network REQUIRED)
target_link_libraries(ZcAnimeDanmuTool PRIVATE Qt6::Network)

然后再.h中添加

1
#include <QNetworkAccessManager>

并且再private中声明一个manager

1
QNetworkAccessManager *m_manager;

使用教程

get请求

直接使用了loop的方法,简单粗暴地演示一下

1
2
3
4
5
6
7
m_manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
QEventLoop loop; //循环
QNetworkReply *reply = m_manager->get(QNetworkRequest(QUrl("url"))); //这里是请求网址
connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); //绑定回复事件
loop.exec(); //循环直到有回复
QString read = reply->readAll();
reply->deleteLater(); //释放内存

最后这个read就是返回内容了,一般是json,需要继续处理

post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
QNetworkAccessManager* naManager = new QNetworkAccessManager(this);
QNetworkRequest request;
//头设置
request.setUrl(QUrl("url")); //这里是请求网址
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json")); //这是一个设置头的示例
//内容设置
QJsonObject jsonObj;
/*此处需要根据情况编写json内容*/
QJsonDocument jsonDoc(jsonObj);
//发送 POST 请求
QEventLoop loop;
QNetworkReply* reply = naManager->post(request, jsonDoc.toJson());
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec(); //一样的循环
QString read;
read = reply->readAll();
reply->deleteLater(); //记得释放内存

在Qt中使用http的get和post请求
https://zao-chen.github.io/2024/10/28/在Qt中使用get和post请求/
作者
Zao_chen
发布于
2024年10月28日
许可协议