QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType,this);
//设置url
QString url = "http://Your Host:Your Port/api/user/login";
//设置头信息
QNetworkRequest requestInfo;
requestInfo.setUrl(QUrl(url));
requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
QJsonObject jsonObj;
jsonObj.insert("account","");
jsonObj.insert("password","123456lpj");
QJsonDocument document;
document.setObject(jsonObj);
QByteArray content = document.toJson(QJsonDocument::Compact);
QNetworkReply *reply = m_pHttpMgr->post(requestInfo, content);
//添加事件循环机制,返回后再运行后面的
QEventLoop eventLoop;
// connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
QObject::connect(m_pHttpMgr, &QNetworkAccessManager::finished, &eventLoop, &QEventLoop::quit);
eventLoop.exec(); //block until finish
//错误处理
if (reply->error() == QNetworkReply::NoError)
{
qDebug() << "request protobufHttp NoError";
}
else
{
qDebug()<<"request protobufHttp handle errors here";
QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
//statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档
qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
qDebug(qPrintable(reply->errorString()));
}
//请求收到的结果
QJsonObject json;
QByteArray responseByte = reply->readAll();
json = QJsonDocument::fromJson(responseByte).object();
qDebug() << "request protobufHttp NoError";
类比postman

该代码片段展示了如何使用Qt的QNetworkAccessManager进行POST请求,设置URL和Content-Type头信息,发送JSON数据,并处理可能的错误。它还涉及到了事件循环以等待请求完成,以及解析和打印HTTP响应的状态码和错误信息。
2万+

被折叠的 条评论
为什么被折叠?



