如何在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); 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;
QJsonDocument jsonDoc(jsonObj);
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();
|