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

QT发送request请求

时间记录:2024/1/23

一、使用步骤

(1)pro文件中添加network模块
(2)创建QNetworkAccessManager网络管理类对象
(3)创建QNetworkRequest网络请求对象,使用setUrl方法设置请求url,使用setHeader方法设置已知的请求头,使用setRawHeader方法设置未知的请求头
(4)使用QNetworkAccessManagerget方法发送get请求,post方法发送post请求,返回QNetworkReply对象
(5)为QNetworkReply对象的finished信号绑定槽,请求发送完成后触发此信号,然后在槽函数中使用QNetworkReply对象的readAll方法获取请求返回的信息

二、QT中json数据的解析和生成json数据

(1)使用类QJsonDocumentQJsonObjectQJsonArrayQJsonValue
(2)普通json格式字符串转为json对象

QString json = "{\"name\":\"zhangsan\",\"value\":[{\"name\":\"lisi\",\"age\":18},{\"name\":\"wangwu\",\"age\":20}]}";
QJsonDocument document = QJsonDocument::fromJson(json.toLocal8Bit());

(3)json对象解析获取数据

QString json = "{\"name\":\"zhangsan\",\"value\":[{\"name\":\"lisi\",\"age\":18},{\"name\":\"wangwu\",\"age\":20}]}";
QJsonDocument document = QJsonDocument::fromJson(json.toLocal8Bit());
QJsonObject object = document.object();
QJsonValue value = object.value("name");//获取第一级json键为name的值
QString nameValue = value.toString();
int valueV = object.value("value").toArray().at(0).toObject().value("age").toInt();//获取第二级json键为age的值

(4)使用QJsonObject对象拼接json格式数据

QJsonObject object2;//创建2级json
object2.insert("name","lisi");
object2.insert("age",18);QJsonObject object3;//创建2级json
object3.insert("name","wangwu");
object3.insert("age",20);QJsonArray array;//创建json数组
array.insert(0,object2);
array.insert(1,object3);QJsonObject object1;//创建1级json
object1.insert("name","zhangsan");
object1.insert("array",array);//将拼接的json数组添加到1级jsonQJsonDocument document;
document.setObject(object1);
QByteArray json = document.toJson();//转换为json数据

三、QT中数据进行base64编码和解码

(1)编码,图片进行编码

    QFile file("D:\\file\\QT\\EveryTest\\Template\\1.jpg");file.open(QIODevice::ReadOnly);QByteArray imageData = file.readAll();file.close();QByteArray base64Data = imageData.toBase64();

(2)解码base64数据

	QByteArray decode = QByteArray::fromBase64(base64Data);QPixmap pixmap;pixmap.loadFromData(decode);

四、关于https接口的请求,需要添加ssl文件

(1)使用QSslSocket::sslLibraryBuildVersionString();查看当前QT使用的ssl版本
(2)windows平台,mingw套件编译,下载ssl,然后复制libcrypto-1_1-x64.dll和libssl-1_1-x64.dll文件到应用程序的同级目录下,发布应用程序时同样需要复制这两个文件
(3)安卓手机平台,复制libcrypto_1_1.so和libssl_1_1到任意位置,然后在项目中添加这两个文件
添加so文件

相关文章:

  • Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)
  • html火焰文字特效
  • MySQL修炼手册12:视图:简化复杂查询与保护数据
  • 高效火情监测,科技助力森林防火【数字地球开放平台】
  • gin数据解析和绑定
  • 【牛客】几何糕手、国际裁判带师、数位dp?、灵异背包、矩阵快速幂签到、第一次放学
  • 化妆-护肤品选购
  • SASS简介及使用方法
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第1章 统计学习方法概论
  • 接口自动化测试框架开发(pytest+allure+aiohttp+ 用例自动生成)
  • 惬意上手Python —— 装饰器和内置函数
  • 网络请求 mvp mvvm get post delete put 请求
  • php基础学习之常量
  • Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)
  • [设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Angular6错误 Service: No provider for Renderer2
  • docker容器内的网络抓包
  • Nacos系列:Nacos的Java SDK使用
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • tensorflow学习笔记3——MNIST应用篇
  • vue 配置sass、scss全局变量
  • Vue2.0 实现互斥
  • Zsh 开发指南(第十四篇 文件读写)
  • 百度地图API标注+时间轴组件
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 构建二叉树进行数值数组的去重及优化
  • 关于Flux,Vuex,Redux的思考
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 走向全栈之MongoDB的使用
  • 容器镜像
  • ​ubuntu下安装kvm虚拟机
  • (02)Hive SQL编译成MapReduce任务的过程
  • (5)STL算法之复制
  • (6)设计一个TimeMap
  • (Python) SOAP Web Service (HTTP POST)
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (七)理解angular中的module和injector,即依赖注入
  • (十六)串口UART
  • (四) Graphivz 颜色选择
  • (一)kafka实战——kafka源码编译启动
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)德国人的记事本
  • (转)为C# Windows服务添加安装程序
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net开发引用程序集提示没有强名称的解决办法
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • /var/lib/dpkg/lock 锁定问题
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @selector(..)警告提示
  • [ACM] hdu 1201 18岁生日
  • [ajaxupload] - 上传文件同时附件参数值
  • [ARM]ldr 和 adr 伪指令的区别