ZBLOG

通过 QNetworkReply 得到 http 头的 content type

在 Qt 中,通过 QNetworkReply 获取 HTTP 响应头的 Content-Type 字段可以通过以下方式实现:


方法一:使用 rawHeader()header()

  1. 获取原始头部数据

    QNetworkReply *reply = ...; // 你的 QNetworkReply 对象
    QByteArray contentType = reply->rawHeader("Content-Type");
    // 或者使用标准化的头部名称(不区分大小写)
    // QByteArray contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString().toUtf8();
    
  2. 处理结果

    if (!contentType.isEmpty()) {
       qDebug() << "Content-Type:" << contentType;
    } else {
       qDebug() << "Content-Type header not found";
    }
    

方法二:使用 QNetworkRequest::KnownHeaders

Qt 提供了对常见 HTTP 头部的标准化访问(通过枚举 QNetworkRequest::KnownHeaders),其中 ContentTypeHeader 对应 Content-Type

QVariant contentTypeVariant = reply->header(QNetworkRequest::ContentTypeHeader);
if (contentTypeVariant.isValid()) {
    QString contentType = contentTypeVariant.toString();
    qDebug() << "Content-Type:" << contentType;
}

完整示例代码

以下是一个简单的示例,展示如何在网络请求完成时获取 Content-Type

// 假设有 QNetworkAccessManager 和 QNetworkRequest 已初始化
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request(QUrl("https://example.com"));
QNetworkReply *reply = manager->get(request);

// 连接 finished 信号
connect(reply, &QNetworkReply::finished, [reply]() {
    if (reply->error() == QNetworkReply::NoError) {
        // 获取 Content-Type
        QByteArray contentType = reply->rawHeader("Content-Type");
        qDebug() << "Content-Type:" << contentType;

        // 或者使用标准化头部
        // QVariant variant = reply->header(QNetworkRequest::ContentTypeHeader);
        // qDebug() << "Content-Type (standard):" << variant.toString();
    } else {
        qDebug() << "Error:" << reply->errorString();
    }
    reply->deleteLater();
});

注意事项

  1. 头部名称大小写:HTTP 头部字段名称不区分大小写,但 rawHeader() 是区分大小写的。建议统一使用小写或大写(如 "Content-Type")。
  2. 多值情况:某些响应可能包含多个 Content-Type(罕见),此时需要根据实际情况解析。
  3. 字符编码:返回的 QByteArray 可能需要转换为字符串(如 QString::fromUtf8(contentType))。

如果需要进一步解析 Content-Type(例如提取 MIME 类型或字符集),可以使用字符串处理工具(如 split(';'))。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24210

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?