1、概述
QNetworkRequest是Qt网络模块中的一个核心类,专门用于处理网络请求。它封装了网络请求的所有关键信息,包括请求的URL、HTTP头部信息等,使得开发者能够方便地在Qt应用程序中执行网络操作,如文件下载、网页内容获取等。QNetworkRequest通常与QNetworkAccessManager和QNetworkReply等类协同工作,共同构建Qt中强大的网络功能体系。
2、重要方法
QNetworkRequest():默认构造函数。QNetworkRequest(const QUrl &url):使用指定的URL构造请求。QNetworkRequest(const QNetworkRequest &other):复制构造函数。
QNetworkRequest &operator=(const QNetworkRequest &other):赋值操作符,用于复制请求对象。void setAttribute(QNetworkRequest::Attribute code, const QVariant &value)和QVariant attribute(QNetworkRequest::Attribute code, const QVariant &defaultValue = QVariant()) const:设置和获取请求属性。void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)和QVariant header(QNetworkRequest::KnownHeaders header) const:设置和获取已知HTTP头部。void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)和QByteArray rawHeader(const QByteArray &headerName) const:设置和获取原始HTTP头部。
void setUrl(const QUrl &url)和QUrl url() const:设置和获取请求的URL。void setPriority(QNetworkRequest::Priority priority)和QNetworkRequest::Priority priority() const:设置和获取请求的优先级。void setMaximumRedirectsAllowed(int maxRedirectsAllowed)和int maximumRedirectsAllowed() const:设置和获取允许的最大重定向次数。void setSslConfiguration(const QSslConfiguration &config)和QSslConfiguration sslConfiguration() const:设置和获取SSL配置。
3、常用枚举类型
枚举类型 Attribute
这个枚举包含了多个属性代码,用于控制请求行为并从回复中传递更多信息给应用程序。例如:
HttpStatusCodeAttribute:获取HTTP状态码。HttpReasonPhraseAttribute:获取HTTP状态消息。RedirectionTargetAttribute:获取重定向目标URL。ConnectionEncryptedAttribute:检查连接是否加密。CacheLoadControlAttribute:控制缓存加载策略。
枚举类型 CacheLoadControl
这个枚举用于控制QNetworkAccessManager的缓冲机制,决定是优先使用网络还是缓存:
AlwaysNetwork:总是从网络加载。PreferNetwork:优先从网络加载,但如果网络不可用则使用缓存。PreferCache:优先使用缓存,但如果缓存不可用则从网络加载。AlwaysCache:总是从缓存加载。
枚举类型 KnownHeaders
已知的HTTP头部字段枚举,方便设置和获取头部信息,例如:
-
ContentDispositionHeader:内容处置。 -
ContentTypeHeader:内容类型。 -
ContentLengthHeader:内容长度。 -
LocationHeader:重定向位置。 -
LastModifiedHeader:最后修改时间。#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);networkManager = new QNetworkAccessManager(this); connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished); QUrl url("http://jsonplaceholder.typicode.com/posts/1"); QNetworkRequest request(url); // 设置自定义头信息 request.setRawHeader("User-Agent", "QNetworkRequest Example"); networkManager->get(request); QTimer::singleShot(5000, this, [&] { QUrl url("http://jsonplaceholder.typicode.com/posts"); QNetworkRequest request(url); // 设置已知头信息 request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); QJsonObject json; json["title"] = "foo"; json["body"] = "bar"; json["userId"] = 1; QJsonDocument jsonDoc(json); QByteArray jsonData = jsonDoc.toJson(); networkManager->post(request, jsonData); });}
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::replyFinished(QNetworkReply *reply)
{
if (reply->error() == QNetworkReply::NoError) {
QByteArray responseData = reply->readAll();
qDebug() << "Response data:" << responseData;
} else {
qDebug() << "Network error:" << reply->errorString();
}
reply->deleteLater();
}
觉得有帮助的话,打赏一下呗。。

需要商务合作(定制程序)的欢迎私信!!