当前位置: 首页 > 网络知识

Qt 使用Http协议通信

时间:2026-01-29 09:26:31

介绍

  使用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 }



上一篇:Modbus Slave 软件使用详解
下一篇:QT 使用 QtCreator 格式化代码
Qt
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素