qt QNetworkRequest详解

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();
    }

觉得有帮助的话,打赏一下呗。。

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

相关推荐
꧁坚持很酷꧂7 小时前
QCustomPlot绘制曲线
qt
火山灿火山10 小时前
Qt常用控件(五) - 多元素控件
开发语言·qt
Ivy_belief11 小时前
Linux:设置和获取单片机gpio引脚和key值
linux·arm开发·qt·gpio·event事件
神仙别闹12 小时前
基于QT(C++)实现B树可视化
c++·b树·qt
feiyangqingyun12 小时前
记一次Qt视频监控系统的优化/双击打开分组可能崩溃的BUG/排对打开通道过程中关闭通道可能崩溃的BUG
qt·音视频·qt监控系统·qt视频轮询
木心爱编程13 小时前
Qt C++ 插件开发指南:插件架构设计与动态加载实战
开发语言·c++·qt
木心爱编程14 小时前
Qt C++ + OpenCV 实战:从零搭建实时视频滤镜与图像识别系统
c++·qt·opencv
adsadswee1 天前
Qt 样式与 QLinearGradient 渐变详解
开发语言·qt·qt样式表·qlineargradient·qss渐变效果
feiyangqingyun1 天前
Qt优化onvif设备搜索/一键批量搜索/onvif设备模拟器/几千路并发/实时推流/虚拟监控摄像头
qt·onvif模拟器
wd_cloud1 天前
QT/6.7.2/Creator编译Windows64 MySQL驱动
开发语言·qt·mysql