Qt应用软件【协议篇】http协议get、post示例

文章目录

  • QT Http的API
  • HTTP GET 请求示例
  • HTTP POST 请求示例
  • 伪装chrome浏览器get请求

QT Http的API

QNetworkAccessManager

  • 作用:管理所有的网络请求,是发送请求和接收响应的中心点。
  • 主要功能
    • 发送HTTP请求(GET, POST, PUT, DELETE等)。
    • 处理网络请求的异步回调。
    • 管理网络连接和重定向。

QNetworkRequest

  • 作用:封装一个网络请求。
  • 主要功能
    • 设置请求的URL。
    • 添加或修改HTTP请求头(如User-Agent, Content-Type)。
    • 配置请求的缓存策略和超时设置。

QNetworkReply

  • 作用:接收并处理网络请求的响应。
  • 主要功能
    • 读取响应内容(如HTML、JSON等)。
    • 获取响应状态码(如200, 404等)。
    • 处理网络错误和异常。

QUrl

  • 作用:处理和操作URL。

  • 主要功能

    • 解析和构建URL。

    • 编码和解码URL组件。

    • 检查URL的有效性。

QHttpMultiPart

  • 作用:用于发送含有多部分内容的HTTP请求,例如文件上传。
  • 主要功能
    • 创建多部分表单数据。
    • 添加文本字段和文件上传。
    • 设置每个部分的Content-Type。

QUrlQuery

  • 作用:方便地构造和解析URL查询字符串。
  • 主要功能
    • 添加、获取、删除查询参数。
    • 将查询参数转换为编码后的字符串。

QSslConfiguration

  • 作用:配置HTTPS请求的SSL参数。
  • 主要功能
    • 设置SSL证书和密钥。
    • 配置加密套件偏好。
    • 管理SSL连接的安全性。

使用场景

  • 简单的HTTP请求:使用QNetworkAccessManagerQNetworkRequest发送GET、POST请求。
  • 处理响应数据:通过QNetworkReply读取和处理返回的数据。
  • 上传文件:通过QHttpMultiPart上传文件或提交表单。
  • 安全通信:通过QSslConfiguration配置HTTPS请求的安全参数。

Qt的网络API设计为异步和事件驱动,适合开发现代的网络应用程序和服务。通过信号和槽机制,可以方便地处理网络请求的完成、错误和进度更新。

HTTP GET 请求示例

QT += network

这个例子展示了如何发送一个简单的HTTP GET请求并打印响应。

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager manager;QUrl url("http://www.example.com");QNetworkRequest request(url);QNetworkReply* reply = manager.get(request);QObject::connect(reply, &QNetworkReply::finished, [reply]() {if (reply->error() == QNetworkReply::NoError) {QByteArray response = reply->readAll();qDebug() << "Response:" << response;} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();});return a.exec();
}

HTTP POST 请求示例

QT += network

这个例子展示了如何发送一个HTTP POST请求,该请求向服务器提交数据,并打印响应。

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>
#include <QUrlQuery>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager manager;QUrl url("http://www.example.com/post");QNetworkRequest request(url);request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");// 设置其他头部信息request.setRawHeader("Accept-Language", "en-US,en;q=0.5");QUrlQuery postData;postData.addQueryItem("key", "value");postData.addQueryItem("anotherKey", "anotherValue");QNetworkReply* reply = manager.post(request, postData.toString(QUrl::FullyEncoded).toUtf8());QObject::connect(reply, &QNetworkReply::finished, [reply]() {if (reply->error() == QNetworkReply::NoError) {QByteArray response = reply->readAll();qDebug() << "Response:" << response;} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();});return a.exec();
}

伪装chrome浏览器get请求

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager manager;// Chrome浏览器的用户代理字符串QString userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36";QUrl url("https://www.example.com");QNetworkRequest request(url);// 设置用户代理request.setHeader(QNetworkRequest::UserAgentHeader, QVariant(userAgent));// 设置其他典型的Chrome请求头部request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");request.setRawHeader("Accept-Language", "en-US,en;q=0.9");request.setRawHeader("Accept-Encoding", "gzip, deflate, br");request.setRawHeader("Connection", "keep-alive");// Chrome特有的请求头部,可能会随版本不同而变化request.setRawHeader("Upgrade-Insecure-Requests", "1");request.setRawHeader("Sec-Fetch-Site", "none");request.setRawHeader("Sec-Fetch-Mode", "navigate");request.setRawHeader("Sec-Fetch-User", "?1");request.setRawHeader("Sec-Fetch-Dest", "document");QNetworkReply* reply = manager.get(request);QObject::connect(reply, &QNetworkReply::finished, [reply]() {if (reply->error() == QNetworkReply::NoError) {QByteArray response = reply->readAll();qDebug() << "Response:" << response;} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();});return a.exec();
}

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

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

相关文章

基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题需求

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

[Android] 240204批量生成联系人,短信,通话记录的APK

平常在做测试的时候&#xff0c;需要批量生成很多测试数据&#xff1b; 陌生人 联系人名字的生成支持随机生成&#xff0c;也可以自定义生成&#xff0c;自定义生成陌生人的数据&#xff0c;联系人的名字是否带索引&#xff1b; 通话记录 随机生成通话记录&#xff0c;在生…

云数据库RDS云监控

1. 什么是云数据库RDS&#xff1f;它有哪些特点&#xff1f; 云数据库RDS是一种在线关系型数据库服务&#xff0c;它具备的特点包括&#xff1a; 安全可靠&#xff1a;提供了容灾、备份、恢复等高可用性功能&#xff0c;确保数据的安全与可靠。弹性伸缩&#xff1a;用户可以根…

free5GC+UERANSIM

使用arp、ifconfig、docker inspect及网桥brctl 相关命令&#xff0c;收集容器IP及Mac地址相关信息&#xff0c;可以梳理出UERANSIMfree5GC模拟环境组网&#xff0c;如下图所示&#xff1a; 如上图所示&#xff1a;环境基于ubuntu 18.04 VMware虚机部署&#xff0c;5GC网元分别…

【React】memo()、useCallback()、useMemo()的区别及使用场景

介绍React中三个hooks方法memo useCallback useMemo的作用及使用场景示例 一、React.memo()&#xff1a;用来控制函数组件的重新渲染&#xff0c;将组件作为参数&#xff0c;函数的返回值是一个新的组件。二、React.useCallback()&#xff1a;将回调函数及依赖项数组作为参数传…

【Python】Unindent does not match any outer indentation level

这个问题一般是代码缩进问题导致的&#xff0c;规范代码缩进格式即可&#xff0c;如图&#xff1a; 这个问题是因为报异常的那行代码下的方法缩进问题导致&#xff0c;def calendar_f(): 方法名前面多了一个空格。 删除空格即可解决此问题。

【python】python爱心代码【附源码】

一、实现效果&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 二、完整代码&#xff1a; import math import random import threading import time from math import sin, cos, pi, log from tkinter import * import re# 烟花相关设置 Fireworks [] m…

Fink CDC数据同步(五)Kafka数据同步Hive

6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…

iview 页面中判断溢出才使用Tooltip组件

使用方法 <TextTooltip :content"contentValue"></TextTooltip> 给Tooltip再包装一下 <template><Tooltip transfer :content"content" :theme"theme" :disabled"!showTooltip" :max-width"300" :p…

滴滴面经相关知识整理(基于newbing)

Vue2和Vue3有许多不同之处&#xff0c;以下是一些主要的区别&#xff1a; 数据劫持方式&#xff1a;Vue2主要是通过Object.defineProperty劫持数据&#xff0c;对于新增的对象属性&#xff0c;使用数组修改元素&#xff0c;视图无法更新1。 性能和体积&#xff1a;Vue3的运行速…

Spring auto-configuration的使用

简介 在构建Maven项目时&#xff0c;使用Spring Boot自动配置可以使项目更易于集成和使用。本文将向您展示如何创建一个Maven项目&#xff0c;并使用Spring Boot自动配置使其能够被其他组件方便地依赖。 步骤 1. 添加Spring Boot Starter依赖 确保您的Maven项目具有必要的S…

跟着cherno手搓游戏引擎【20】混合(blend)

抽象&#xff1a; Renderer.h: #pragma once #include"RenderCommand.h" #include "OrthographicCamera.h" #include"Shader.h" namespace YOTO {class Renderer {public:static void Init();static void BeginScene(OrthographicCamera& …

天拓四方:边缘计算网关功能、特点与应用举例

传统的数据处理方式面临网络延迟、带宽限制和安全风险等问题。为了解决这些问题&#xff0c;边缘计算技术应运而生&#xff0c;而边缘计算网关作为其核心组件&#xff0c;正发挥着越来越重要的作用。边缘计算网关位于数据源和云数据中心之间。它具备数据采集、协议转换、数据处…

Oracle 执行计划(Explain Plan)

执行计划&#xff1a;一条查询语句在 ORACLE 中的执行过程或访问路径的描述。即就是对一个查询任务&#xff0c;做出一份怎样去完成任务的详细方案。 如果要分析某条 SQL 的性能问题&#xff0c;通常我们要先看 SQL 的执行计划&#xff0c;看看 SQL 的每一步执行是否存在问题。…

视觉SLAM十四讲学习笔记(一)初识SLAM

目录 前言 一、传感器 1 传感器分类 2 相机 二、经典视觉 SLAM 框架 1 视觉里程计 2 后端优化 3 回环检测 4 建图 5 SLAM系统 三、SLAM 问题的数学表述 四、Ubuntu20.04配置SLAM十四讲 前言 SLAM: Simultaneous Localization and Mapping 同时定位与地图构建&#…

交友系统---让陌生人变成熟悉人的过程。APP小程序H5三端源码交付,支持二开。

随着社交网络的发展和普及&#xff0c;人们之间的社交模式正在发生着深刻的变革。传统的线下交友方式已经逐渐被线上交友取而代之。而同城交友正是这一趋势的产物&#xff0c;它利用移动互联网的便利性&#xff0c;将同城内的人们连接在一起&#xff0c;打破了时空的限制&#…

机器视觉系统设计:视觉系统中的成像基准

开发视觉系统的一个重要活动是验证其部署是否符合工程规范。一个成功的视觉应用程序的两个特点是它无需工程师干涉情况下正常工作了多长时间&#xff0c;以及它的维护和复制部署是多么简易。实现所有如上所述目标的一个关键步骤是确定视觉系统的基准。 在这里使用的上下文中&a…

移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案

当下&#xff0c;传统媒体面临着诸多挑战&#xff0c;如何利用信息技术提升内容的质量、形式和分发效率&#xff0c;成为媒体行业的迫切需求。移动云作为数字中国建设的“主力军”&#xff0c; 立足于新兴媒体与云计算市场的变化与需求&#xff0c;推出了ONAIR 媒体云解决方案&…

HTTP/2

HTTP/2核心 二进制帧 HTTP 2.0中所有加强性能的核心带你在于此–二进制传输 之前的HTTP/1的版本中&#xff0c;传输数据方式–文本传输 在 HTTP 2.0 中&#xff0c;有两个非常重要的概念&#xff0c;分别是帧&#xff08;frame&#xff09;和流&#xff08;stream&#xff0…

vue2学习笔记(2/2)

vue2学习笔记&#xff08;1/2&#xff09; vue2学习笔记&#xff08;2/2&#xff09; 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…