读取 HTTP 标头

Posted

技术标签:

【中文标题】读取 HTTP 标头【英文标题】:Reading HTTP headers 【发布时间】:2011-07-21 14:56:25 【问题描述】:

我正在尝试将我的应用程序与 Web 服务和 here 连接,用户建议将自定义标头发送回我的应用程序。

我正在使用此代码

void Coonnec::serviceRequestFinished(QNetworkReply *reply)

    QByteArray bytes = reply->readAll();

    if (reply->error() != QNetworkReply::NoError) 
        qDebug() << "Reply error: " + reply->errorString();
    
    else
    
        qDebug() << "Uploaded: " + QDateTime::currentDateTime().toString();
        qDebug() << reply->rawHeaderList();
    
    reply->close();
    bytes.clear();
    reply->deleteLater();

我从 php 发送此标头

header('XAppRequest-Status: complete');

在运行应用程序时,我可以看到我得到了这个标头,但我无法获取它的值,因为

reply->rawHeader(bytes);

什么都不返回。

如何获取“完成”值?

【问题讨论】:

【参考方案1】:

我建议将一个插槽连接到您回复的void QNetworkReply::metaDataChanged () 信号。

Qt 文档说

只要此回复中的元数据发生更改,就会发出此信号。 元数据是不是内容(数据)本身的任何信息, 包括网络标头。在大多数情况下,元数据 将在接收到第一个数据字节时完全知道。 但是,可能会收到标头或其他信息的更新 数据处理期间的元数据。

我确实在 Qt 中使用了 web-services/client,但我注意到某些标头的信息在我预期的时候不可用!我不得不“等待”这个信号来检查标题内容。

【讨论】:

rawHeaderList() 返回这个("Date", "Server", "X-Powered-By", "XAppRequest-Status", "Content-Length", "Keep-Alive", "Connection", "Content-Type"),所以我认为这不是问题。 reply-&gt;rawHeader(bytes);命令中bytes的内容是什么?你检查你是否通过了正确的headerName 这太明显了,因此我没有尝试。它使用 reply-&gt;rawHeader("XAppRequest-Status"); 工作。

以上是关于读取 HTTP 标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flask 中捕获和读取传入 HTTP 请求的标头? [复制]

在 Spring REST 控制器中读取 HTTP 标头

从 Elm 中的 HTTP 响应中读取自定义标头

ZOHO deluge 脚本 getUrl() 函数可以读取 HTTP 响应标头吗?

从 ASP.NET Core 中的不同 HTTP 标头读取 JWT 令牌

使用 node.js 读取传入的 HTTP 标头