【QT】——QT中HTTP通信的使用流程

这篇具有很好参考价值的文章主要介绍了【QT】——QT中HTTP通信的使用流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

基本概念

1.QNetworkAccessManager

常用的公共成员函数

信号 

2.QNetworkRequest ——HTTP请求

3.QNetworkReply——HTTP响应

HTTP通信流程

基本概念

Qt中的HTTP通信访问 API 是围绕 QNetworkAccessManager 对象构建的,该对象保存它发送的请求的通用配置和设置,一个 QNetworkAccessManager 实例应该足以满足整个 Qt 应用程序网络访问的需求。

QNetworkAccessManager 对象被创建时,那么 应用程序就可以使用它在网 络上发送请求。它提供了一组标准的函数,可以承载网络请求和一些可选的数据 并且每一个请求返回一个 QNetworkReply 对象。该返回的对象包含着返回的请求应 带的所有数据。

QNetworkAccessManager 将它收到的请求排入队列。 并行执行的请求数量取决于协议。 目前,对于桌面平台上的 HTTP 协议,一个主机/端口组合并行执行 6 个请求

目前,对于桌面平台的 HTTP 协议,对于一个主机/端口的组合,可 6 个请求并行执 行。

1.QNetworkAccessManager

常用的公共成员函数

//头文件
#include <QNetworkAccessManager>

//构造函数
QNetworkAccessManager(QObject *parent = nullptr)


//发布get请求以获取内容,
//返回一个新的 QNetworkReply 对象,该对象在新数据到达时发出 readyRead() 信号。
QNetworkReply * get(const QNetworkRequest &request)

//发送post请求
QNetworkReply* post(const QNetworkRequest &request, QIODevice *data)
QNetworkReply* post(const QNetworkRequest &request, const QByteArray &data)
QNetworkReply* post(const QNetworkRequest &request, QHttpMultiPart *multiPart)

//返回cookies
QNetworkCookieJar * cookieJar() const

//刷新网络连接的内部缓存。与 clearAccessCache() 相比,身份验证数据被保留。
void clearConnectionCache()

//与指定主机进行连接
void connectToHost(const QString &hostName, quint16 port = 80)

//设置传输超时时间。如果在超时到期之前没有传输字节,传输将被中止。
//零表示未设置计时器。如果未调用此函数,则超时将被禁用且值为 0。
void setTransferTimeout(int timeout = QNetworkRequest::DefaultTransferTimeoutConstant)

信号 

//信号 
//当有请求已经完成的时候,会发射该信号
void finished(QNetworkReply *reply)

//当 SSL/TLS 会话成功完成初始握手时,会发出此信号。此时,还没有传输用户数据。
[signal] void encrypted(QNetworkReply *reply)

//网络回复完成时会发出此信号。回复参数将包含一个指向刚刚完成的回复的指针。该信号与 //QNetworkReply::finished() 信号一起发出。
//注意:不要直接删除连接到该信号的槽中的回复对象。应使用 deleteLater()
[signal] void finished(QNetworkReply *reply)

注意:QNetworkAccessManager类对所接收的请求会一个一个的排序,如果要并行处理这些请求,同时间内处理的数量取决于协议。目前,对HTTP协议是6个请求并行处理的。

//创建个请求对象,设置好请求的内容
QNetworkRequest request;
request.setUrl(QUrl("http://qt-project.org")); 
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0"); 

//应答对象reply,不仅获得下载数据,还获得失败时的错误信息
QNetworkReply *reply = manager->get(request); 
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); 
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError))); 
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(slotSslErrors(QList<QSslError>)));

2.QNetworkRequest ——HTTP请求

QNetworkRequest是QT中的HTTP请求对象,它包含请求的url和请求报头,正文等信息。


//构造函数
QNetworkRequest(const QUrl &url = QUrl())
QNetworkRequest(const QNetworkRequest &other)

//设置QNetworkAccessManager 用于此请求及其底层 HTTP/2 连接的参数。
void setHttp2Configuration(const QHttp2Configuration &configuration)

//返回在此网络请求中设置的所有报头的列表。按照设置顺序排列
QList rawHeaderList()

//设置此网络请求所指的 URL 为 url。
void setUrl(const QUrl &url)

//设置表头的值。两次设置相同的标题会覆盖之前的设置
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)

3.QNetworkReply——HTTP响应

QNetworkReply是HTTP响应类,QNetworkReply对象包含了响应的数据和响应头

注意:在一轮请求完成后,不要立即删除QNetworkReply对象,要用deleteLater()函数让Qt系统自己判断在适当的时候删除。

接口函数:

//QNetworkReply被处理完成则返回true
bool  isFinished() const

//如果请求还在进行,或者响应处理还没有完成,或者响应已经被终止,则返回true
bool  isRunning() const

//返回上传或者下载的url,该 URL 可能与原始请求的 URL 不同。
QUrl QNetworkReply::url() const

//返回该响应对应的请求
QNetworkRequest request() const

//返回读缓冲区的大小
qint64 readBufferSize() const

//关闭此设备。未读的数据会被丢弃,但网络资源直到读完才被释放。
//如果有任何上传正在进行,它将一直持续到完成。
//当所有操作结束并且网络资源被释放时,finished() 信号被发出。
void close();

//信号
//当x响应完成处理后发出此信号。发出此信号后,将不再更新回复的数据。
//除非调用 close() 或 abort() ,否则仍将打开回复以供读取.
//因此可以通过调用 read() 或 readAll() 来检索数
void finished()


//每当元数据发生更改时,都会发出此信号。
//元数据是任何不属于内容(数据)本身的信息,包括网络标头。
[signal] void metaDataChanged()

//发出此信号以指示此网络请求的下载部分的进度(如果有下载)
//如果没有与此请求关联的下载,则此信号将发出一次,bytesReceived 和 bytesTotal 的值都为0。
//bytesReceived 指示接收的字节数,bytesTotal 指示预期下载的总字节数
//如果要下载的字节数未知,bytesTotal 将为 -1
[signal] void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)

//出现错误时发出此信号。代码参数包含检测到的错误代码。
//调用 errorString() 以获取错误条件的文本表示。
[signal] void errorOccurred(QNetworkReply::NetworkError code)

HTTP通信流程

  1. 创建QNetworkAccessManager 对象。
  2. 创建 QNetworkRequest 对象,调用setUrl函数 设置请求url,调用setHeader函数设置请求报头。
  3. 调用QNetworkAccessManager 调用post函数或者get函数发送HTTP请求
  4. 设置槽函数,并调用connect函数设置QNetworkReply的处理动作

模板:


//举例;
QNetworkAccessManager* manger=new QNetworkAccessManager(this);
QNetworkRequest request; 
request.setUrl(url);
//设置需要设置响应报头
request.setHeader(QNetworkRequest::ContentTypeHeader,
                   QVariant("application/json"));

//发送请求
QNetworkReply *reply = manager->post(request);
//或者
//data数据的处理流程
QNetworkReply *reply = manager->post(request, data);

//设置http响应的处理动作
connect(reply, &QNetworkReply::readyRead, this, [=](){
}

        文章来源地址https://www.toymoban.com/news/detail-557697.html

到了这里,关于【QT】——QT中HTTP通信的使用流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序

    Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议,如 HTTP、FTP、SNMP等,这些类主要是 QNetworkRequest、QNetworkReply和QNetworkAccessManager。 QNetworkRequest 类通过一个URL 地址发起网络协议请求,也保存网络请求的信息,目前支持 HTTP、FTP 和局部文件 URLs的下载或上传。 QNe

    2024年02月13日
    浏览(37)
  • 【计网笔记06】计算机网络之应用层协议(SMTP协议、POP3协议、HTTP协议)、DNS域名系统、电子邮件系统

    这篇文章,主要介绍计算机网络之应用层协议(SMTP协议、POP3协议、HTTP协议)、DNS域名系统、电子邮件系统。 目录 一、计算机网络之应用层 1.1、应用层介绍 1.2、网络应用模型

    2024年02月08日
    浏览(40)
  • HTTP协议概述 | 简析HTTP请求流程 | HTTP8种请求方法

    目录 🌏 HTTP的简单介绍 何为HTTP HTTP1.0与HTTP1.1 🌏 HTTP的请求方法 1、OPTIONS 2、HEAD 3、GET 4、POST 5、PUT 6、DELETE 7、TRACE 8、CONNECT 🌏 HTTP的工作原理 🌏 HTTP请求/响应的步骤 1、客户端连接到Web服务器 2、浏览器客户端发送HTTP请求 3、服务器接受请求并返回HTTP响应 4、释放连接TCP连

    2024年02月03日
    浏览(30)
  • QT Http协议

    本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这个协议。 HTTP(超文本传输协议)是互联网上应用最为广泛的协议之一,它定义了客户端和服务器之间进行通信的规则。HTTP是一种无状态的协议,它通过请求

    2024年02月15日
    浏览(30)
  • Qt中运用HTTP协议

    在使用Qt框架进行应用开发的过程中,很多时候需要进行客户端与服务端的网络通信,这时候就需要Qt的internet模块。而网络通信中最常用的协议就是http协议,Qt对http协议的调用进行了封装,使用非常方便。这里对常用的http请求demo做一下总结,方便大家参考。 在使用internet模

    2024年02月14日
    浏览(31)
  • Qt 使用HTTP请求网络API并接收返回的JSON格式的数据

    引入网络模块: mainwindow.h: mainwindow.cpp:

    2024年02月13日
    浏览(37)
  • HTTP协议详解:基本概念与工作流程

    HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于在计算机网络上进行数据交换的通信协议。它是互联网上最常用的协议之一,被广泛应用于Web浏览器和服务器之间的通信。本文将深入探讨HTTP协议的基本概念和工作流程,帮助读者更好地理解这个重要的通信协议。

    2024年02月10日
    浏览(32)
  • ESP32网络应用 -- ESP32-S3使用HTTP协议获取城市天气数据

    超文本传输协议(Hypertext Transfer Protocol,HTTP),是一种建立在TCP协议之上,应用非常广泛的请求-响应协议,关于HTTP协议的详细描述,网上已经不乏文章,此处不再详细论述。 作为一款网络功能强大Wi-Fi SOC芯片,ESP32-S3可以通过ESP-IDF编程框架提供的应用程序接口,方便地构建

    2024年02月09日
    浏览(26)
  • 浏览器与服务器通信过程(HTTP协议)

    目录 1 概念 2 常见的 web 服务器有 3 浏览器与服务器通信过程 3.1 DNS 3.2 URL 4 HTTP请求方法和应答状态码 4.1 HTTP请求报文段实例 4.2 HTTP请求方法 5 HTTP应答报头和应答状态 5.1 HTTP的应答报头结构 5.2 HTTP的应答状态 浏览器与 web 服务器在 应用层 通信使用的是 HTTP 协议(超文本传输协

    2024年03月16日
    浏览(45)
  • 初识http协议,简单实现浏览器和服务器通信

    平时俗称的 “网址” 其实就是说的 URL,例如在百度上搜索一个C++ 可以看到这段网址前面有个 https 那么这个就代表着使用的是https协议,现在都是使用https协议,不过还是需要认识以下http协议 像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包