今天我们介绍一下QT的http请求,这里有post和get两种方式

一、post请求方式:参数分为网址和具体请求值两个部分,有时候还需要设置头信息,看具体情况定

 void MainWindow::sendPostRequest()
{
QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
//设置url
QString url = "http://10.0.0.20:8005/order/charge";
//设置头信息
QNetworkRequest requestInfo;
requestInfo.setUrl(QUrl(url));
requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
// requestInfo.setRawHeader("Content-Type","application/json");//服务器要求的数据头部
// requestInfo.setRawHeader("Accept","text/json,*/*;q=0.5");//服务器要求的数据头部 //发送数据
QByteArray qByteHttpData = sendJson();
QNetworkReply *reply = m_pHttpMgr->post(requestInfo, qByteHttpData);
//添加事件循环机制,返回后再运行后面的
QEventLoop eventLoop;
connect(reply, SIGNAL(finished()), &eventLoop, SLOT(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()));
} //请求收到的结果
QByteArray responseByte = reply->readAll();

二、get请求方式:参数和网址拼接到一起请求

 void MainWindow::sendGetRequest()
{
QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
//设置url
QString url = "http://10.0.0.20:8005/vending_machine/items/ac83f39ea268";//fae4b325e52c
QNetworkRequest requestInfo;
requestInfo.setUrl(QUrl(url)); //添加事件循环机制,返回后再运行后面的
QEventLoop eventLoop;
QNetworkReply *reply = m_pHttpMgr->get(requestInfo);
connect(reply, SIGNAL(finished()), &eventLoop, SLOT(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()));
}
//请求返回的结果
QByteArray responseByte = reply->readAll();
qDebug() << responseByte;

三、主要区别:

get用于请求获取数据,post向指定的资源创建修改数据

get把参数包含在URL中(长度有限制),POST通过请求实体传递参数(安全)

  

最新文章

  1. swift学习笔记4——扩展、协议
  2. 【笔记】js parentsNode,lastChild,appendChild,insertBefore,nextSibling的意义及运用
  3. IOS中取乱序数据最大值、最小值方法
  4. WebKit示例解读
  5. 那些年我们错过的超级好用的CSS属性
  6. ORACLE SQL前端补0的三种方式。
  7. Show Global Status 整理
  8. PHP-CGI进程占用过多CPU
  9. linux 中 svn 服务器搭建 重启
  10. ●POJ 3348 Cows
  11. String之常量池小结
  12. HNOI2019 苟命记
  13. bzoj1233 单调队列优化dp
  14. 编译器处理警告、错误 #pragma GCC diagnostic ignored &quot;-Wunused&quot;
  15. 涨姿势:Java 分业务、分级别实现自定义日志打印
  16. java基础题整理(1)
  17. Ubuntu下安装eclipse遇到的问题
  18. Centos6 下安装Nginx+Mysql+PHP
  19. 吴裕雄 python 机器学习-DMT(1)
  20. 自定义View之圆形水波扩散动效

热门文章

  1. [Swift]LeetCode54. 螺旋矩阵 | Spiral Matrix
  2. [Swift]LeetCode228. 汇总区间 | Summary Ranges
  3. 初步学习大数据——设置虚拟机固定ip地址
  4. 【视频】使用ASP.NET Core开发GraphQL服务
  5. python预编译函数compile,exec,eval
  6. Android app 架构的一些讨论和资源收藏
  7. Redis【入门】就这一篇!
  8. python基础1--安装、package、数据类型
  9. 表达式目录树(Expression)
  10. C#如何发送邮件