(Qt) Http之Get请求使用基础

news2024/11/25 20:18:05

文章目录

  • 前言
  • Code
    • 完整code
    • 效果
    • 循环loop的使用
  • 讲解
    • 配置
    • 相关对象
    • Https
  • END

前言

http的操作是网络通信中非常常见的操作,其中广泛使用get,post两种操作。

本文将对Qt中,http的get请求做简单应用,来进行展示。

Code

完整code

#include <QApplication>
#include <QDebug>
#include <QJsonDocument>
#include <QNetworkAccessManager>
#include <QNetworkReply>

namespace {

/**
 * @brief receive_getReply
 * @param reply
 * 处理回答
 */
void receive_getReply(QNetworkReply *reply) {
    if (nullptr == reply) {
        qDebug() << "reply nullptr";
        return;
    }

    /// 等待结束后再read
    QObject::connect(reply, &QNetworkReply::finished, [reply]() {
        /// read data
        QByteArray byte = reply->readAll();
        // reply->disconnect();
        /// delete pointer
        reply->deleteLater();

        /// data to json
        QJsonDocument jsonDocument = QJsonDocument::fromJson(byte.data());

        /// process data
        /// can emit in class::QObject
        qDebug() << jsonDocument;
    });
}

/**
 * @brief request_get
 * @param url
 * 查询,get请求
 * 注意,下方的QNetworkAccessManager 是静态对象
 */
void request_get(const QUrl &url) {
    static QNetworkAccessManager manager;
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);
    receive_getReply(reply);

    // QEventLoop loop;
    /// [1]
    // QObject::connect(&manager, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
    /// [2]
    // QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
    // loop.exec();
}

/**
 * @brief test_network
 * 测试fun
 */
void test_network() {
    /// 天气预报查询api
    /// 首尾不要用空格
    QString url = R"(http://api.k780.com:88/?app=weather.future
                    &appkey=10003
                    &sign=b59bc3ef6191eb9f747dd4e83c99f2a4
                    &format=json
                    &weaid=苏州)";
    request_get(QUrl(url));
}

}  // namespace

/**
 * @brief main
 * @param argc
 * @param argv
 * @return
 */
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    test_network();

    return app.exec();
}

效果

这里不做排版了,不然篇幅过大

在这里插入图片描述

循环loop的使用

  • [1]

    QNetworkAccessManager 对于每个 reply 的 finish 都会发送 finished 的信号。

    如果一个 manager 处理多个请求可能会出现先后结束的问题。

  • [2]

    针对每个 reply 自身的声明周期进行connect

    注意,不要让这个 reply 解出 connect 就是调用reply->disconnect(); 否则可能会有部分的connect失效。或者保证运行的最后一个去取消。

void request_get(const QUrl &url) {
    /// 注意是static
    static QNetworkAccessManager manager;
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);
    receive_getReply(reply);
	
    /// 设置死循环,直到请求结束
    QEventLoop loop;
    /// [1]
    QObject::connect(&manager, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
    /// [2]
    QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
    loop.exec();
}

讲解

配置

.pro

QT += network

header

#include <QNetworkAccessManager>
#include <QNetworkReply>

相关对象

  • QNetworkAccessManager
    • 这是网络操作的管理者
    • 若本对象消亡了,则他管理的所有网络操作均会失效
  • QNetworkRequest
    • 网络请求的对象,用于接收url
    • 当获得 reply 后,当前对象可以销毁,因为这只是 manager 的一个参数
  • QNetworkReply
    • 进行get或者post请求后的实体
    • 这个实体会异步的进行数据的接收
    • 注意这个实体需要手动销毁

Https

若请求https协议,则可能会出现以下问题。

这不是Qt本身的问题,因为没有对应的ssl环境,当配置好后则可以正常运行。

此处不演示,请咨询查找。

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed



END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2分钟完成Github配置ssh密钥

2分钟完成Github配置ssh密钥 前言&#xff1a; 配置ssh密钥的目的是为了可以在自己的本地开发环境顺利拉取和推送代码到Github 本机是Ubuntu 16.04环境&#xff0c;已安装ssh 步骤1 进入当前用户的home目录&#xff1a; #执行以下命令进入 cd ~进入.ssh/目录下生成ssh的密钥…

JS antdv实现表格树形级联效果

概述 项目中需实现以下这种效果&#xff1a;级联数据&#xff0c;表格横向排列&#xff0c;数据之间相互联动。现有UI组件无法满足此需求&#xff0c;只能撸起袖子加油干&#xff01;&#xff01; 实现效果如下 开发前先准备一个树形数据 treeData.js const treeData [{ar…

Linux常用命令【多图预警】

Linux常用命令 文章目录 Linux常用命令Linux虚拟机的安装Linux系统目录结构Linux命令的语法基础命令查看当前目录下所有子目录和子文件ls查看命令手册man查看当前目录pwd切换到指定目录cd 管道符 |文件目录操作命令创建一级目录&#xff08;文件夹&#xff09;mkdir创建多级目录…

计算机毕业论文内容参考|基于微信小程序的学生课表系统的设计与实现

文章目录 导文摘要前言绪论1课题背景2国内外现状与趋势3课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于微信小程序的学生课表系统的设计与实现 摘要 基于微信小程序的学生课表系统是一个方便学…

【电路原理学习笔记】第2章:电压、电流和电阻:2.8 电气安全

第2章&#xff1a;电压、电流和电阻 2.8 电气安全 2.8.1 触电 电流&#xff08;而非电压&#xff09;通过人的身体是触电的的原因。当然&#xff0c;需要有电压施加在有电阻的物体上才能产生电流。当人身体上的一个点与电压接触&#xff0c;而另一个点与不同的电压或地面接触…

玄子Share - mybatis-Plus 3.5.3.1 学习笔记

玄子Share - mybatis-Plus 3.5.3.1 学习笔记 介绍 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 [MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 愿景&#xff1a;…

docker 镜像的使用与创建(三)

相关文章&#xff1a; linux上docker容器运行web应用简单介绍(二&#xff09;_做测试的喵酱的博客-CSDN博客 linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客 Docker 容器使用 | 菜鸟教程 linux应用docker基本使用&#xff08;一&#xff09;_做测试的喵酱的博客-…

29. 求出商品连续售卖的时间区间

文章目录 题目需求思路一实现一题目来源 题目需求 从订单详情表&#xff08;order_detail&#xff09;中&#xff0c;求出商品连续售卖的时间区间。 期望结果如下&#xff1a; sku_id &#xff08;商品id&#xff09;start_date &#xff08;起始时间&#xff09;end_date &…

鸢尾花书简介

鸢尾花书简介 鸢尾花书 系列介绍1《编程不难》2《可视之美》3《数学要素》4《矩阵力量》5《统计至简》6《数据有道》7《机器学习》 重要链接 特别棒&#xff0c;极力推荐&#xff01;&#xff01;&#xff01; 鸢尾花书 系列介绍 1《编程不难》 《编程不难》&#xff1a;https:…

win11预览版更新,并尝试使用Copilot

文章目录 win11预览版更新&#xff0c;并使用Copilot先说结果所需内容具体操作更新操作系统版本更新Edge安装ViVeTool v0.3.3 测试Copilot问题唯一优点 总结 win11预览版更新&#xff0c;并使用Copilot 先说结果 体验一言难尽&#xff0c;就相当于是一个快捷聊天提问窗口。 自…

C语言实现WiFi数据收发(电脑作为服务器)

功能实现&#xff1a; 手机与电脑在一个局域网&#xff0c;实现手机与电脑之间数据收发。 主要是用socket协议完成功能。 电脑作为服务器&#xff0c;手机作为客户端 编程环境&#xff1a; 电脑端变成环境&#xff1a;VC6.0 手机端WiFi助手&#xff1a; 核心代码&#xff1a; …

K8S平台应用安全(Secret Service Ingress)

平台应用安全 1 平台应用安全1.1 敏感数据1.1.1 应用数据1.1.2 Secret基础1.1.3 Secret案例11.1.4 Secret案例2 1.2 数据访问1.2.1 网络体系解读1.2.2 Service实践1.2.3 Service进阶1.2.4 Service解读 1.3 应用流量1.3.1 Ingress基础1.3.2 Ingress实践1.3.3 Ingress进阶1.3.4 I…

用Python实现黑客代码

前言 用Python实现黑客代码&#xff0c;根本关不掉的窗口 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 首先先介绍一下使用到的tkinter库 Tkinter 是 P…

通付盾联合嘶吼安全产业研究院共同发布《数据安全细分市场调研报告》并成功入选数据安全产业图谱多项细分领域,附报告!

7月4日&#xff0c;通付盾联合嘶吼安全产业研究院共同发布《时维鹰扬履践致远&#xff1a;数据安全细分市场调研报告2023》。 百炼露锋芒&#xff0c;本次《时维鹰扬履践致远&#xff1a;数据安全细分市场调研报告2023》聚焦数据安全市场细分领域市场规模、厂商玩法和产品竞争情…

二十三种设计模式第十四篇--策略模式

策略模式&#xff1a;主要围绕一个类的行为或者其算法在运行时更改&#xff0c;也是一种行为型模式。 在软件开发中&#xff0c;我们经常遇到需要根据不同的情况选择不同算法或行为的情况。传统的做法是使用大量的条件语句来实现这种逻辑&#xff0c;但这样的实现方式往往难以…

Numpy学习(参考)

目录 一、前言 二、numpy官方文档 文档划分 参数规范 相关知识明知 Routines学习(部分) 1、创建 2、数组操作常用 ufunc 三、numpy基本操作 开篇探索 数据类型 创建数组 创建数组有5种常规机制 常用创建方法 拷贝创建 数组运算 形状操作 查看形状 形状变换 …

第124天:内网安全-代理技术Socks协议路由不出网后渗透通讯CS-MSF上线

知识点 #知识点&#xff1a; 1、代理软件使用-Win&Linux 2、代理协议使用-Socks4/5 3、CS&MSF-网络通讯&控制上线-隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通的问题&…

MySQL数据库------------数据库的安装-----开始步入梦想

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————————— 这一篇文章主要讲解一下MySQL的下载 数据库MySQL 这是 CentOS7 的 mysql 安装&#xff0c;如果有其他版本的需求&#xff…

C++ 环境设置

本地环境设置 如果您想要设置 C 语言环境&#xff0c;您需要确保电脑上有以下两款可用的软件&#xff0c;文本编辑器和 C 编译器。 文本编辑器 这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。 文本编辑器的名…

tqdm笔记

目录 tqdm笔记导入显示进度条与enumerate一起使用 tqdm报错tqdm在notebook里每次刷新增加一行 tqdm笔记 导入 from tqdm import tqdm显示进度条 for i in tqdm(range(100)):time.sleep(0.01)与enumerate一起使用 a list(range(100)) for i, j in enumerate(tqdm(a)):time.…