QT实现一个GET或POST请求并返回JSON的方法
时间: 2024-03-16 08:44:50 浏览: 176
Qt工程中用curl发送post请求,发送json返回json
好的,下面是一个简单的示例代码,可以实现GET或POST请求并返回JSON数据:
```C++
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
class NetworkManager : public QObject
{
Q_OBJECT
public:
explicit NetworkManager(QObject *parent = nullptr) : QObject(parent)
{
manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished, this, &NetworkManager::onReplyFinished);
}
void sendRequest(const QString &url, const QString &method = "GET", const QJsonObject &data = QJsonObject())
{
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
if (method == "GET") {
manager->get(request);
} else {
QJsonDocument jsonDoc(data);
QByteArray jsonData = jsonDoc.toJson();
manager->post(request, jsonData);
}
}
signals:
void requestFinished(const QJsonObject &result);
private slots:
void onReplyFinished(QNetworkReply *reply)
{
if (reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
QJsonDocument jsonDoc = QJsonDocument::fromJson(data);
QJsonObject result = jsonDoc.object();
emit requestFinished(result);
} else {
qDebug() << "Network error: " << reply->errorString();
}
reply->deleteLater();
}
private:
QNetworkAccessManager *manager;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
NetworkManager networkManager;
QObject::connect(&networkManager, &NetworkManager::requestFinished, [](const QJsonObject &result) {
qDebug() << "Result: " << result;
});
// 发送GET请求
networkManager.sendRequest("https://jsonplaceholder.typicode.com/todos/1");
// 发送POST请求
QJsonObject postData;
postData.insert("key", "value");
networkManager.sendRequest("http://example.com/api", "POST", postData);
return a.exec();
}
#include "main.moc"
```
在上面的示例中,我们创建了一个名为NetworkManager的类,用于发送网络请求,并在请求完成时发出信号。在main函数中,我们创建了一个NetworkManager对象,并连接requestFinished信号,以便在请求完成后输出返回的JSON数据。
使用sendRequest函数发送GET或POST请求。如果发送GET请求,则只需要传递URL和请求方法(默认为"GET");如果发送POST请求,则还需要传递JSON数据。
在请求完成时,会调用onReplyFinished槽函数,该函数将返回的JSON数据解析为QJsonObject,并发出requestFinished信号,以便在主函数中处理返回的数据。
注意,在使用QNetworkAccessManager发送网络请求时,需要在请求完成后调用deleteLater函数,以避免内存泄漏。
阅读全文