Qt 使用Http协议通信


介绍

  使用QT进行应用开发时,有时候需要进行客户端和服务端的网络通信,网络通信常用的一种协议就是http协议。QT对http协议进行了封装,下面将介绍两种http通信方式的使用。

  在使用http时需要在pro文件中添加对应的模块。

QT += network

  http主要两种通信方式为get和post两种

1.多个独立参数GET请求
1 int NormalGetRequest(QString paramer1, QString paramer2) 2 24 25 //解析返回的Json结果 26 QByteArray replyData = reply>readAll(); 27 QJsonParseError json_error; 28 QJsonDocument jsonDoc(QJsonDocument::frJson(replyData, &json_error)); 29 if(json_error.error != QJsonParseError::NoError) 30 33 QJsonObject rootObj = jsonDoc.object(); 34 QString codeStr = rootObj.value("code").toString(); 35 if (codeStrpare("200") == 0) 36 42 return 0; 43 } 44 else 45 49 }
2.参数数组GET请求
1 int GetRequestWithArray(QVector<QString> m_filePathVector) 2 11 12 QJsonDocument document; 13 document.setArray(array); 14 QString arrayString = document.toJson(QJsonDocument::Cpact); 15 16 //生成对应的网络请求 17 QNetworkRequest request; 18 QString scheme = "http"; 19 QString serverAddr = "192.168.0.1"; 20 QString port = "80"; 21 QString requestHeader = scheme + QString("://") + serverAddr + QString(":") + port; 22 QString fullRequest = requestHeader + QString("/api/vi/user/getarray?paramers=%1").arg(arrayString); 23 request.setUrl(QUrl(fullRequest)); 24 25 //获取错误 26 QNetworkAccessManager manager; 27 QNetworkReply *reply = manager.get(request); 28 QEventLoop eventLoop; 29 QObject::connect(reply, SIGNAL(finished()),&eventLoop, SLOT(quit())); 30 eventLoop.exec(QEventLoop::ExcludeUserInputEvents); 31 if(reply>error() != QNetworkReply::NoError) 32 35 36 //解析返回的Json结果 37 QByteArray replyData = reply>readAll(); 38 QJsonParseError json_error; 39 QJsonDocument jsonDoc(QJsonDocument::frJson(replyData, &json_error)); 40 if(json_error.error != QJsonParseError::NoError) 41 44 QJsonObject rootObj = jsonDoc.object(); 45 QString codeStr = rootObj.value("code").toString(); 46 if (codeStrpare("200") == 0) 47 53 return 0; 54 } 55 else 56 60 }
3.上传参数数据POST请求
1 int NormalPostRequest(QString paramer1, QString paramer2) 2 30 31 32 //解析返回的Json结果 33 QByteArray replyData = reply>readAll(); 34 QJsonParseError json_error; 35 QJsonDocument jsonDoc(QJsonDocument::frJson(replyData, &json_error)); 36 if(json_error.error != QJsonParseError::NoError) 37 40 QJsonObject rootObj = jsonDoc.object(); 41 QString codeStr = rootObj.value("code").toString(); 42 if (codeStrpare("200") == 0) 43 49 return 0; 50 } 51 else 52 56 }
4.上传参数和文件POST请求
1 int PostRequestWithFile(QString paramer1, QString paramer2,QString filePath) 2 54 55 //解析返回的Json结果 56 QByteArray replyData = reply>readAll(); 57 QJsonParseError json_error; 58 QJsonDocument jsonDoc(QJsonDocument::frJson(replyData, &json_error)); 59 if(json_error.error != QJsonParseError::NoError) 60 QJsonObject rootObj = jsonDoc.object(); 64 QString codeStr = rootObj.value("code").toString(); 65 if (codeStrpare("200") == 0) 66 72 return 0; 73 } 74 else 75 79 }
5.下载文件GET请求
1 int DownloadFileFrWeb(QString fileUrl,QString&fileSavePath) 2 22 23 //保存下载的文件 24 QFile file(fileSavePath); 25 if(!file.open(QIODevice::WriteOnly)) 26 29 file.write(reply>readAll()); 30 filelose(); 31 return 0; 32 }



上一篇:Qt Creator配置clang-format格式化代码插件

下一篇:ModScan32 使用基础


Qt
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图