首页 > 其他分享 >Qt - Http协议

Qt - Http协议

时间:2023-11-13 16:35:38浏览次数:30  
标签:协议 HTTP Qt 请求 响应 服务器 Http 客户端

前言

本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这个协议。

一、HTTP概述

HTTP(超文本传输协议)是互联网上应用最为广泛的协议之一,它定义了客户端和服务器之间进行通信的规则。HTTP是一种无状态的协议,它通过请求-响应模型来实现客户端和服务器之间的数据传输。
以下是HTTP的一般工作流程:

1.客户端发送HTTP请求:客户端(通常是Web浏览器)向服务器发送HTTP请求。请求由以下部分组成:

请求方法(GET、POST、PUT、DELETE等):指定服务器执行的操作类型。
资源路径:指定要访问的服务器上的资源路径。
请求头:包含有关请求的其他元数据,如请求的主机、内容类型等。
请求正文(对于某些请求方法):包含请求所携带的数据。

2.服务器处理请求:服务器接收并解析HTTP请求,执行相应的操作:

检查请求的合法性和安全性。
处理请求中指定的资源或执行请求中指定的操作。
构造HTTP响应。

3.服务器发送HTTP响应:服务器生成HTTP响应,响应由以下部分组成:

状态码:指示请求是否成功或出现错误的数字代码。
响应头:包含有关响应的元数据,如响应的内容类型、长度等。
响应正文:包含服务器返回给客户端的实际数据。

4.客户端接收HTTP响应:客户端接收并解析HTTP响应:

检查响应的状态码以确定请求的成功与否。
解析响应头以获取响应的元数据。
处理响应正文中的数据。

HTTP使用TCP协议作为传输协议,默认使用80端口进行通信。它是一种无连接协议,这意味着每个请求都是独立的,服务器不会保留先前请求的状态信息。为了在请求之间保持状态,可以使用Cookie或会话等机制。
此外,HTTP还支持各种请求方法,最常见的是GET和POST。GET方法用于从服务器获取资源,而POST方法用于向服务器提交数据。
总结起来,HTTP是一种用于在客户端和服务器之间传输数据的协议。它为Web应用程序提供了通信和数据交换的基础,是实现互联网应用的核心之一

二、HTTP的两种模型

1.B/S模型

B/S模型是一种基于浏览器和服务器的交互模型,通常用于Web应用程序。在这种模型中,客户端使用浏览器作为前端界面,通过HTTP协议与服务器进行通信。客户端(浏览器)负责显示用户界面,发送HTTP请求,并接收和渲染服务器返回的HTML、CSS和JavaScript等资源。服务器负责存储数据、处理业务逻辑和生成动态网页内容。B/S模型具有以下特点:

客户端只需安装浏览器,无需安装额外客户端软件。
应用程序部署在服务器上,用户通过浏览器访问。
跨平台性好,可以在不同操作系统和设备上使用。

2.C/S模型

C/S模型是一种基于客户端和服务器的交互模型,常用于传统的桌面应用程序。在这种模型中,客户端通过安装在本地计算机上的客户端软件与服务器进行通信。客户端负责处理用户界面和部分业务逻辑,发送请求到服务器并接收响应。服务器负责处理业务逻辑和存储数据。C/S模型具有以下特点:

需要在客户端安装相应的客户端软件,适用于特定平台和操作系统。
应用程序的逻辑部分可以在客户端执行,减轻服务器的负担。
可以通过局域网或互联网与服务器进行通信。
可以实现一些功能更复杂、操作更强大的应用程序。

 

三、请求报文和响应报文

  • 1.请求报文:

请求报文是由客户端发送给服务器,用于请求特定资源或执行特定操作。它由以下几个部分组成:
请求行:描述了请求的方法、目标资源的路径和HTTP协议的版本,通常包含以下三个字段:

请求方法:指定了客户端希望服务器执行的操作,如GET、POST、PUT、DELETE等。
请求目标:表示客户端希望访问的资源路径,可以是绝对路径或相对路径。
协议版本:指定所使用的HTTP协议的版本,如HTTP/1.1。
请求头:包含了关于请求的附加信息,格式为键值对。常见的请求头字段包括:

Host:指定请求的目标主机。
User-Agent:标识发送请求的客户端应用程序。
Content-Type:指定请求正文的类型。
请求正文(可选):包含客户端发送给服务器的数据,通常在使用POST等方法时使用。

  • 2.响应报文:

响应报文是服务器对客户端请求的回应,包含了所请求资源的数据或执行结果。它由以下几个部分组成:
状态行:描述了响应的状态,包含以下三个字段:

协议版本:指定所使用的HTTP协议的版本,如HTTP/1.1。
状态码:表示服务器对请求的处理结果,如200表示成功,404表示资源未找到。
状态信息:对状态码进行简短的解释说明。
响应头:包含了关于响应的附加信息,格式为键值对。常见的响应头字段包括:

Content-Type:指定响应正文的类型。
Content-Length:指定响应正文的长度。
Set-Cookie:在响应中设置Cookie。
响应正文:包含了服务器返回给客户端的数据,可以是HTML、JSON、文件等。

请求报文和响应报文的结构化文本格式使得客户端和服务器能够互相理解并进行有效的通信。它们是HTTP通信的基础,用于传递请求和响应的相关信息

 

四、调试软件Postman

Postman是一款广泛使用的API开发和测试工具,它提供了一个强大的图形用户界面(GUI),用于发送HTTP请求、测试和调试API。

安装非常简单最近在百度查找进行下一步安装即可:

在postman软件中可以请求到JSON格式的数据:

五、QT中的HTTP类

在Qt中,用于进行HTTP通信的类是QNetworkAccessManager类和相关的类。QNetworkAccessManager提供了一个用于发送网络请求和接收网络响应的高层API,它基于Qt的网络模块实现。

以下是一些与HTTP通信相关的类和其主要功能:

 

QNetworkAccessManager类:

该类用于发送HTTP请求和接收HTTP响应。
可以发起GET、POST、PUT、DELETE等各种类型的请求。
提供了信号和槽机制,允许处理请求的完成、错误和响应等事件。
支持同步和异步方式发送请求。

QNetworkRequest类:

表示一个HTTP请求。
可以设置请求的URL、请求头、请求方法等属性。
可以添加自定义的请求头字段。

QNetworkReply类:

表示一个HTTP响应。
提供了获取响应状态码、响应头、响应正文等信息的方法。
可以通过该类获取服务器返回的数据。

QNetworkCookieJar类:

用于管理和存储HTTP请求和响应中的Cookie。
可以设置和获取Cookie,并将其与请求关联起来。
这些类的组合使用可以实现在Qt应用程序中进行HTTP通信的功能。以下是一个简单的示例代码,演示如何使用QNetworkAccessManager发送GET请求并处理响应:

 

六、使用HTTP类请求数据

使用HTTP类请求数据步骤:

1.使用QNetworkAccessManager类创建网络访问管理器

2.使用QNetworkRequest创建请求对象

3.使用QNetworkReply发出GET请求(在请求完成后一定要记得使用deleteLater来清理释放资源)

4.连接信号与槽得到数据

#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建网络访问管理器
    QNetworkAccessManager m_manger;

    // 创建请求对象
    QNetworkRequest request;
    QUrl url("http://www.baidu.com");
    request.setUrl(url);

    // 发出GET请求
    QNetworkReply* reply = m_manger.get(request);

    // 连接请求完成的信号
    QObject::connect(reply, &QNetworkReply::finished, [&]() {
        // 读取响应数据
        QByteArray responseData = reply->readAll();
        qDebug() << responseData;

        // 请求完成后,清理资源
        reply->deleteLater();
        qApp->quit();
    });

    return a.exec();
}

 

标签:协议,HTTP,Qt,请求,响应,服务器,Http,客户端
From: https://www.cnblogs.com/zhuchunlin/p/17829437.html

相关文章

  • 无法访问 Maven 3.8.1 http 仓库。
    无法访问Maven3.8.1http仓库。可能的解决方案:检查Mavensettings.xml是否不包含http仓库检查Mavenpom文件是否不包含http仓库 http://maven.aliyun.com/nexus/content/groups/public/在Mavensettings.xml中为 http://maven.aliyun.com/nexus/content/grou......
  • http、https、tcp三次握手,四次挥手
    HTTP、HTTPS和TCP介绍HTTP(超文本传输协议是一种发布和接收HTML页面的方法,被用于在Web浏览器和网站服务器之间传递信息。是用于www浏览的一个协议。HTTPS(超文本传输安全协议)=HTTP+SSL/TSL(安全层),HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主......
  • 服务器Windows Server发布.NET Core项目出现HTTP错误500.19 - Internal Server Error[
    服务器WindowsServer发布.NETCore项目出现HTTP错误500.19-InternalServerError[错误代码:0x8007000d]经检查,发现是因为缺少【ASPNETCoreModuleV2】解决方案:到微软官方下载相应.net版本的HostingBundle  https://dotnet.microsoft.com/en-us/download/dotnet  下......
  • C# 下的HTTP断点续传
    在了解HTTP断点续传的原理之前,让我们先来了解一下HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由客户机(浏览器)向服务器(WEBSERVER)提交请求时发送报文的协议。回复协议是由服务器(webserver),向客户机(浏览器)回复报文时的协议。请求和回复协议都由......
  • 个微协议开发/微信个人号二次开发/ipad协议/api接口
    E云管家,是完整的第三方服务平台,并基于IPAD协议8.0.37开发出的最新个微API服务框架。你可以通过API实现个性化微信功能(例云发单助手、社群小助手、客服系统、机器人等),用来自动管理微信消息。用户仅可一次对接,完善所有功能。可实现分布式部署,批量管理服务器。如果您不想自己部......
  • ubuntu开发之安装QT creater出现文本文件忙解决办法
    问题:问题解析:其实就跟windows下面,该文件已被打开,无法删除是一样的道理。解决办法:①找到该文件被那个进程所进行着指令如下:【可知被2537进程使用】sudofuser文件名②杀死该进程sudokill-9进程号现象:......
  • Delphi TNetHTTPClient使用递归方式取所有分页数据
    DelphiTNetHTTPClient使用递归方式取所有分页数据   业务系统提供的一个查询数据接口,可以通过分页方式取得数据,如果一次性取得所有数据,将页大小增大即可,但如果数据太多怕会造成内存溢出。   综合考虑每次只取一个分页,分页数据不要太大,用递归方式来获取是比较合理的解......
  • C# HTTP 断点续传
    在IIS中,磁盘路径对应的文件是可以直接下载的,而原生的IIS并不需要额外的配置就可以进行断点续传。而在小猪的项目中使用到的文件下载地址不对应磁盘路径的文件地址,而是需要验证用户是否有权限进行下载然后使用使用fileresult提供文件下载。这样整个下载过程都需要自己动手写代码完......
  • Filebeat采集通用基于S3协议的对象存储作为输入源
    一背景随着云计算和大数据技术的快速发展,越来越多的组织和企业选择将数据存储在云端的对象存储服务中。对象存储服务提供了高可靠性、可扩展性和低成本的存储解决方案,因此成为了许多应用场景的首选。S3(SimpleStorageService)是亚马逊AWS提供的一种对象存储服务,许多云厂商也提供了......
  • TCP客户端&服务端QT开发
    TCP客户端&服务端QT开发TCPClient1.Widget类写UI界面,创建socket对象Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);socket=newQTcpSocket;//创建socket对象}2.取消按键槽函数//直接关闭窗口即......