QT实现GET或POST请求的方法,如果是POST请求可以传递formdata参数,返回JSON数据
时间: 2024-03-16 13:43:06 浏览: 86
以下是一个使用Qt实现GET或POST请求的方法,并且支持POST请求传递formdata参数,返回JSON数据:
```cpp
#include <QtNetwork>
#include <QJsonObject>
#include <QJsonDocument>
#include <QUrlQuery>
QJsonObject sendRequest(QString url, QString method, QVariantMap formData = QVariantMap())
{
QJsonObject responseData;
// 创建请求对象
QNetworkRequest request(url);
// 设置请求头
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
// 创建请求管理器
QNetworkAccessManager manager;
// 发送请求
QNetworkReply *reply = nullptr;
if (method == "GET") {
reply = manager.get(request);
} else if (method == "POST") {
QUrlQuery params;
foreach (QString key, formData.keys()) {
params.addQueryItem(key, formData.value(key).toString());
}
QByteArray postData = params.toString(QUrl::FullyEncoded).toUtf8();
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)、formdata参数(POST请求时可选,用于传递表单数据)。它返回一个JSON对象,是服务器响应的JSON数据。
例如,要发送一个POST请求并传递以下formdata参数:
```cpp
QVariantMap formData;
formData["name"] = "John";
formData["age"] = 30;
formData["city"] = "New York";
QJsonObject responseData = sendRequest("http://example.com/api/users", "POST", formData);
```
如果要发送GET请求,可以这样调用方法:
```cpp
QJsonObject responseData = sendRequest("http://example.com/api/users", "GET");
```
请注意,此方法在主线程中发出网络请求,并等待响应。在实际应用中,应该使用Qt的信号和槽机制或QFuture等工具来处理异步操作。
阅读全文