QT写一个可以get和post,接收json的方法
时间: 2024-03-16 08:42:59 浏览: 130
以下是一个使用Qt实现的可以发送GET和POST请求,并接收JSON响应的方法:
```cpp
#include <QtNetwork>
#include <QJsonObject>
#include <QJsonDocument>
QJsonObject sendRequest(QString url, QString method, QJsonObject requestData = QJsonObject())
{
QJsonObject responseData;
// 创建请求对象
QNetworkRequest request(url);
// 设置请求头
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
// 创建请求管理器
QNetworkAccessManager manager;
// 发送请求
QNetworkReply *reply = nullptr;
if (method == "GET") {
reply = manager.get(request);
} else if (method == "POST") {
QJsonDocument doc(requestData);
QByteArray postData = doc.toJson();
reply = manager.post(request, postData);
}
// 等待响应
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
// 处理响应
if (reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
QJsonDocument doc = QJsonDocument::fromJson(data);
responseData = doc.object();
} else {
qDebug() << "Error: " << reply->errorString();
}
// 释放资源
reply->deleteLater();
return responseData;
}
```
此方法接收三个参数:URL、请求方法(GET或POST)、请求数据(POST请求时需要提供)。它返回一个JSON对象,是服务器响应的JSON数据。
例如,要发送一个POST请求并传递以下JSON数据:
```json
{
"name": "John",
"age": 30,
"city": "New York"
}
```
可以这样调用 `sendRequest` 方法:
```cpp
QJsonObject requestData;
requestData["name"] = "John";
requestData["age"] = 30;
requestData["city"] = "New York";
QJsonObject responseData = sendRequest("http://example.com/api/users", "POST", requestData);
```
如果要发送GET请求,可以这样调用方法:
```cpp
QJsonObject responseData = sendRequest("http://example.com/api/users", "GET");
```
请注意,此方法在主线程中发出网络请求,并等待响应。在实际应用中,应该使用Qt的信号和槽机制或QFuture等工具来处理异步操作。
阅读全文