QT实现GET或POST请求的方法,如果是POST请求可以传递formdata参数,如果是GET请求可以传递URL参数(键值对),输入的URL允许带参数,参数拼接的问题,返回JSON数据
时间: 2024-03-16 12:45:42 浏览: 101
Qt工程中加入curl用于发送Post请求Get请求,数据为json格式
3星 · 编辑精心推荐
对于GET请求,可以使用QNetworkAccessManager类的get方法来发送请求。可以通过QUrlQuery类的addQueryItem方法添加URL参数,最后将参数拼接到URL后面即可。例如:
```cpp
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QUrl url("http://example.com");
QUrlQuery query;
query.addQueryItem("key1", "value1");
query.addQueryItem("key2", "value2");
url.setQuery(query);
QNetworkRequest request(url);
QNetworkReply *reply = manager->get(request);
connect(reply, &QNetworkReply::finished, [=]() {
QByteArray data = reply->readAll();
// 解析返回的JSON数据
});
```
对于POST请求,可以使用QNetworkAccessManager类的post方法来发送请求。可以通过QHttpMultiPart类来添加formdata参数,也可以通过QUrlQuery类来添加URL参数。例如:
```cpp
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QUrl url("http://example.com");
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("hello");
QHttpPart filePart;
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"test.txt\""));
QFile *file = new QFile("test.txt");
file->open(QIODevice::ReadOnly);
filePart.setBodyDevice(file);
file->setParent(multiPart);
multiPart->append(textPart);
multiPart->append(filePart);
QNetworkRequest request(url);
QNetworkReply *reply = manager->post(request, multiPart);
connect(reply, &QNetworkReply::finished, [=]() {
QByteArray data = reply->readAll();
// 解析返回的JSON数据
});
multiPart->setParent(reply);
```
需要注意的是,返回的数据可能不是完整的JSON数据,可能需要对数据进行拼接和解析。可以在QNetworkReply的finished信号中读取所有的数据,然后进行解析。
阅读全文