从 QNetworkReply 读取未解码的数据

Posted

技术标签:

【中文标题】从 QNetworkReply 读取未解码的数据【英文标题】:Read undecoded data from QNetworkReply 【发布时间】:2013-09-15 19:00:05 【问题描述】:

是否可以从 QNetworkReply 读取未解码的数据?

响应使用 gzip 编码(Content-Encoding: gzip HTTP 标头),但是当我调用 readAll() 方法时,它返回解码数据。我需要原始压缩数据,因为它是发送给我的。有什么想法吗?

【问题讨论】:

与does-qnetworkmanager-get-accept-compressed-replies-by-default相关 【参考方案1】:

您必须为自己的QNetworkRequest 设置标题:

 networkRequest.setRawHeader("Accept-Encoding", "gzip");

那么 Qt 不会在回复中为您解码。

我们可以在qhttpnetworkconnection.cpp的源码中看到QHttpNetworkConnectionPrivate::prepareRequest

    // If the request had a accept-encoding set, we better not mess
    // with it. If it was not set, we announce that we understand gzip
    // and remember this fact in request.d->autoDecompress so that
    // we can later decompress the HTTP reply if it has such an
    // encoding.
    value = request.headerField("accept-encoding");
    if (value.isEmpty()) 
#ifndef QT_NO_COMPRESS
        request.setHeaderField("Accept-Encoding", "gzip");
        request.d->autoDecompress = true;
#else
        // if zlib is not available set this to false always
        request.d->autoDecompress = false;
#endif
    

【讨论】:

以上是关于从 QNetworkReply 读取未解码的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QNetWorkReply 类型的变量中读取从服务器发送的数据?

iphone,objective c,如何从音频文件中读取原始数据(未应用编解码器)

连接丢失时未检测到 QNetworkReply 错误信号

QNetworkReply 未发出 downloadProgress

使用 QNetworkAccessManager 从 Web 检索数据:文件已下载但 QNetworkReply::readAll 返回 null

错误解码:TypeError:无法读取未定义的属性“2”