当前位置: 首页 > article >正文

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

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

           

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


http://www.kler.cn/a/516917.html

相关文章:

  • 安卓14自由窗口圆角处理之绘制圆角轮廓线
  • 线性数据结构
  • Kubernetes 集群网络及服务暴露方式详解
  • LINUX下设置分离状态(Detached State)和未设置分离状态的主要区别在于线程资源的管理方式和线程的生命周期。以下是两种状态的对比:
  • (回溯分割)leetcode93 复原IP地址
  • 困境如雾路难寻,心若清明步自轻---2024年创作回顾
  • 【springboot集成knife4j】
  • c++常见设计模式之装饰器模式
  • GPS信号生成:C/A码序列生成【MATLAB实现】
  • 基于单片机的水果保鲜仓库设计
  • OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯
  • Day 16 卡玛笔记
  • opengrok_windows_多工程环境搭建
  • 小哆啦的编程冒险:罗马数字转整数
  • Golang笔记——静态强类型、编译型、并发型语言
  • Android OpenGL(六) 纹理
  • doris:Routine Load
  • ReUtil- 一个强大的正则表达式工具库
  • 【Linux】理解Linux中一切皆文件、缓冲区、ext2文件系统、软硬链接
  • build报错:Your build is currently configured to use incompatible Java 21.0.3 and Gradle 5.4.1Cannot...
  • HarmonyOS应用深浅适配
  • leetcode 123. 买卖股票的最佳时机 III
  • Grafana
  • 微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)
  • 入门Stable-Diffusion-WebUI全过程
  • USART_串口通讯轮询案例(HAL库实现)