当前位置: 首页 > news >正文

QT之Http请求

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

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

 1 void MainWindow::sendPostRequest()2 {3     QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();4     //设置url5     QString url = "http://10.0.0.20:8005/order/charge";6     //设置头信息7     QNetworkRequest requestInfo;8     requestInfo.setUrl(QUrl(url));9     requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
10 //  requestInfo.setRawHeader("Content-Type","application/json");//服务器要求的数据头部
11 //  requestInfo.setRawHeader("Accept","text/json,*/*;q=0.5");//服务器要求的数据头部
12 
13     //发送数据
14     QByteArray qByteHttpData = sendJson();
15     QNetworkReply *reply =  m_pHttpMgr->post(requestInfo, qByteHttpData);
16     //添加事件循环机制,返回后再运行后面的
17     QEventLoop eventLoop;
18     connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
19     eventLoop.exec();       //block until finish
20 
21     //错误处理
22     if (reply->error() == QNetworkReply::NoError)
23     {
24         qDebug() << "request protobufHttp NoError";
25     }
26     else
27     {
28         qDebug()<<"request protobufHttp handle errors here";
29         QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
30         //statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档
31         qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
32         qDebug(qPrintable(reply->errorString()));
33     }
34 
35     //请求收到的结果
36     QByteArray responseByte = reply->readAll();
37 }

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

 1 void MainWindow::sendGetRequest()2 {3     QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();4     //设置url5     QString url = "http://10.0.0.20:8005/vending_machine/items/ac83f39ea268";//fae4b325e52c6     QNetworkRequest requestInfo;7     requestInfo.setUrl(QUrl(url));8 9     //添加事件循环机制,返回后再运行后面的
10     QEventLoop eventLoop;
11     QNetworkReply *reply =  m_pHttpMgr->get(requestInfo);
12     connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
13     eventLoop.exec();       //block until finish
14     //错误处理
15     if (reply->error() == QNetworkReply::NoError)
16     {
17         qDebug() << "request protobufHttp NoError";
18     }
19     else
20     {
21         qDebug()<<"request protobufHttp handle errors here";
22         QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
23         //statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档
24         qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
25         qDebug(qPrintable(reply->errorString()));
26     }
27     //请求返回的结果
28     QByteArray responseByte = reply->readAll();
29     qDebug() << responseByte;
30 }

三、主要区别:

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

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

GET

POST

后退按钮/刷新

无害

数据会被重新提交(浏览器应该告知用户数据会被重新提交) 

书签

可收藏为书签

不可收藏为书签

缓存

能被缓存

不能被缓存

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded或multipart/form-data.为进制数据使用多重编码

历史

参数保留在浏览器历史中

参数不会保留在浏览器历史中

对数据长度的限制

是的。当发送数据时,GET方法向URL添加数据;URL的长度是受限制的(URL 的最大长度是2048个字符) 

无限制

对数据类型的限制

只允许ASCII字符。

没有限制。也允许二进制数据。

安全性

POST相比,GET的安全性较差,因为所发送的数据是URL的一部分。

在发送密码或其他敏感信息时绝不要使用GET !

POST比GET更安全,因为参数不会被保存在浏览器历史或web服务器日志中

可见性

数据在URL中对所有人都是可见的

数据不会显示在URL中

http://www.lryc.cn/news/25098.html

相关文章:

  • 何谓dB , dB怎么理解?
  • 【数据聚类|深度聚类】Unsupervised Deep Embedding for Clustering Analysis(DEC)论文研读
  • Nuxt.js项目开发过程遇到的问题以及对Nuxt.js的学习与总结
  • JavaSE:异常机制
  • Go mockito 使用说明 (github/mockey)
  • Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建
  • 超详细MySQL(免安装版)安装与配置
  • STM32F1,F4,L1系列禁止JTAG和SW引脚方法
  • NVIDIA CUDA初级教程视频学习笔记1
  • CEC2005:星雀优化算法(Nutcracker optimizer algorithm,NOA)求解CEC2005(提供MATLAB代码)
  • 工作实战之密码防重放攻击
  • 如何编写测试用例?
  • 5.排序算法之二:选择排序
  • Ubuntu18系统安装:node及node版本管理工具nvm部署前端项目
  • 统计学 假设检验
  • 【C++】哈希
  • 「TCG 规范解读」PC 平台相关规范(3)
  • 这篇教你搞定Android内存优化分析总结
  • 概率论与数理统计期末小题狂练 11-12两套,12-13-1
  • golang对字符串的处理操作 如何正确理解 rune byte和string
  • 软件项目管理简答题复习(1)
  • 云Windows Server 2022 Datacenter 安装MySQL8解压缩版 mysql-8.0.32-winx64 230301记录
  • 如何使用BeaconEye监控CobaltStrike的Beacon
  • STM32开发(17)----CubeMX配置CRC
  • 【MySQL】基础操作:登录、访问、退出和卸载
  • 【算法经典题集】递推(持续更新~~~)
  • mysql兼容性验证
  • C++回顾(五)—— 构造函数和析构函数
  • 嵌入式学习笔记——概述
  • 化繁为简高效部署 华为云发布部署服务CodeArts Deploy