Qt中使用http协议通信
Qt中如何使用http协议通信
- QNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。
- Network Access API都是围绕着一个QNetworkAccessManager对象构造的,这个对象包含着发送请求的一些通用配置和设置。它包含着代理和缓存的配置,以及和这些事物相关的一些信号,并且应答信号可以作为我们检测一个网络操作的进度。
- 一个QNetworkAccessManager对于一整个Qt应用程序来说已经足够了!
- 一旦一个QNetworkAccessManager对象被创建了,那么应用程序就可以使用它在网络上发送请求。
- 它提供了一组标准的函数,可以承载网络请求和一些可选的数据,并且每一个请求返回一个QNetworkReply对象。该返回的对象包含着返回的请求应带的所有数据。
QNetworkAccessManager 类
- QNetworkAccessManager将会把它受到的请求排队。并行执行的请求数量是依赖于协议的。
- 目前,对于桌面平台的HTTP协议,对于一个主机/端口的组合,可6个请求并行执行。
- 发送头请求
get
post
QNetworkRequest类
Network Access API的一部分,并且这个类包含着在网络上发送请求的必要信息。
- 它包含了一个URL和一些可以用来修改请求的附加信息。
- 将需要发送的http请求协议初始化到该类中
请求头
数据
url
QNetworkReply 类
QNetworkAccessManage返回的一个对象, 请求完成之后, 需要删除该对象
- 通过该对象, 读server返回的 数据
readyRead()
finished();
readall()
代码示例
// 需要一个mamager对象, 做get ,post QNetworkAccessManager* manager = new QNetworkAccessManager(this); // 准备工作 - 初始化一个QNetworkRequest QNetworkRequest res; // 设置头 - 浏览器 res.setHeader(QNetworkRequest::UserAgentHeader, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"); res.setUrl(QUrl("http://www.baidu.com:80")); QNetworkReply* reply = manager->get(res); // 读服务器回写的数据 connect(reply, &QNetworkReply::readyRead, this, [=]() { // 读数据 QVariant str = reply->header(QNetworkRequest::LocationHeader); // 数据 - 不包括头 QByteArray data = reply->readAll(); qDebug() << data; qDebug() << str.toString(); });