Qt实现Http POST请求
QByteArray query(QJsonObject jsonContent)
{
QByteArray queryErrorResult ;queryErrorResult.clear();
//设置超时处理定时器
QTimer timer;
timer.setInterval(10000); // 设置超时时间 10 秒
timer.setSingleShot(true); // 单次触发
// 合成URL,getIpAdressFromLocal获取IP地址
QString qUrlS = getIpAdressFromLocal()+QString("query?random_number=1");
QUrl qUrl(qUrlS);
QByteArray postData;///>上传的json内容
postData.append(QJsonDocument(jsonContent).toJson());
// 设置发送
QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setUrl(qUrl);
// 开启一个局部的事件循环,等待响应结束,退出
qDebug()<<"Send: "<<jsonContent;
QNetworkReply* reply = manager->post(request, postData);
QEventLoop eventLoop;
connect(&timer, &QTimer::timeout, &eventLoop, &QEventLoop::quit);
connect(manager, &QNetworkAccessManager::finished, &eventLoop, &QEventLoop::quit);
timer.start();//启动定时器
eventLoop.exec();//启动事件循环
if(timer.isActive()){//处理响应,定时器激活状态
timer.stop();//停止定时器
if(reply->error() != QNetworkReply::NoError){//http请求出错,进行错误处理
qDebug() << "http请求出错 : " << reply->errorString();
reply->deleteLater();
return queryErrorResult;
}
else{
// http - 响应状态码
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"服务器返回的Code : "<<statusCode;
if(statusCode==200){//http请求响应正常
QByteArray replyContent = reply->readAll();
return replyContent;
}
else{
reply->deleteLater();
return queryErrorResult;
}
}
}
else{//超时处理
disconnect(manager, &QNetworkAccessManager::finished, &eventLoop, &QEventLoop::quit);
reply->abort();
qDebug() << "http请求超时 ";
return queryErrorResult;
}
reply->deleteLater();
return queryErrorResult;
}