QT中使用HTTP post请求数据时,三种不同的Content-Type的代码编写,做个记录,方便查询使用
application/json
- 内容数据为Json对象
QString addr = QString("url");
QUrl url(addr);
// 创建json
QJsonObject object;
QByteArray byte = QJsonDocument(object).toJson(QJsonDocument::Compact);
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setUrl(url);
QNetworkReply *reply = m_netManager->post(request, byte);
connect(reply, &QNetworkReply::finished, this, [ = ] {
// 获取回复数据
if (reply->error() == QNetworkReply::NoError) {
QByteArray byteArray = reply->readAll();
QJsonParseError jsonError;
QJsonDocument document = QJsonDocument::fromJson(byteArray, &jsonError);
if (jsonError.error == QJsonParseError::NoError) {
} else {
}
} else {
}
reply->deleteLater();
});
multipart/form-data
- 在表单中需要上传文件,使用该类型
QString url = QString("");
QHttpMultiPart *multipart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
// text/plain数据
QHttpPart textPart1;
serviceType.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
serviceType.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"key1\""));
serviceType.setBody("value1");
QHttpPart textPart2;
libraryName.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
libraryName.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"key2\""));
libraryName.setBody("value2");
QHttpPart textPart3;
extra.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
extra.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"key3\""));
extra.setBody("value3");
// 文件
QHttpPart imagePart;
QString contentDispositionHeader = QString("form-data; name=\"key\"; filename=\"%1\"").arg("pix.jpg");
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(contentDispositionHeader));
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
QFile *imageFile = new QFile(filePath);
imageFile->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(imageFile);
imageFile->setParent(multipart);
// 构建networkRequest
QNetworkRequest request(url);
#if 0
// 一般不需要我们自己设置边界
// 边界
QByteArray m_boundary;
m_boundary.append("multipart/form-data; boundary=");
m_boundary.append(multipart->boundary());
request.setRawHeader(QByteArray("Content-Type"), m_boundary);
#endif
// 请求数据
multipart->append(textPart1);
multipart->append(textPart2);
multipart->append(textPart3);
multipart->append(imagePart);
QNetworkReply *reply = m_networkManager->post(request, multipart);
multipart->setParent(reply);
//解析数据回传
connect(reply, &QNetworkReply::readyRead, [ = ] {
QByteArray byteArray = reply->readAll();
QJsonDocument replydocument = QJsonDocument::fromJson(byteArray, &jsonerror);
if (jsonerror.error != QJsonParseError::NoError) {
}
reply->deleteLater();
});
application/x-www-form-urlencoded
- form表单数据被编码为key1=value1&key2=value2格式发送到服务器
QString addr = QString("url");
QUrl url(addr);
QString data = QString("key1=value1");
data += QString("&key2=value2");
data += QString("&key3=value3");
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
request.setUrl(url);
QNetworkReply *reply = m_netManager->post(request, data.toUtf8());
connect(reply, &QNetworkReply::finished, this, [ = ] {
// 获取回复数据
if (reply->error() == QNetworkReply::NoError) {
} else {
}
reply->deleteLater();
});