Iis QNetworkManager是否默认接受压缩回复?
我使用从服务器获取文件,但是我不知道在传输过程中是否使用标准gzip压缩来压缩文件,如果没有,如何让它们下载压缩文件Iis QNetworkManager是否默认接受压缩回复?,iis,qt,qt4,compression,Iis,Qt,Qt4,Compression,我使用从服务器获取文件,但是我不知道在传输过程中是否使用标准gzip压缩来压缩文件,如果没有,如何让它们下载压缩文件 我该怎么检查呢?你应该使用数据包嗅探器/网络分析仪自己检查 QNetworkAccessManager确实支持接收压缩的HTTP回复,因此理论上,如果HTTP服务器设置正确,它应该可以工作。考虑到下面的句子,我会说不,但它们可以是: downloadProgress()信号也是 接收到数据时发出,但 它可能包含的字节数 不表示实际字节 已接收,如果需要任何转换 对内容(例如, 解
我该怎么检查呢?你应该使用数据包嗅探器/网络分析仪自己检查
QNetworkAccessManager确实支持接收压缩的HTTP回复,因此理论上,如果HTTP服务器设置正确,它应该可以工作。考虑到下面的句子,我会说不,但它们可以是: downloadProgress()信号也是 接收到数据时发出,但 它可能包含的字节数 不表示实际字节 已接收,如果需要任何转换 对内容(例如, 解压缩并移除 协议开销) 你可以在这里找到它: 我没试过 为了压缩,如果我记得很清楚,你可以发送QByteArray。。。在这类对象上,可以使用“压缩” 您还可以查看一些Qt示例,如: 我没有全部看,但也许你会发现一些有趣的东西
希望对你有所帮助 我刚刚通过添加以下内容进行了快速测试:
request.setRawHeader("Accept-Encoding", "gzip,deflate");
发送到QNetworkRequest,数据返回看起来压缩的内容(因为它小了约20%且不可用)
就解压而言,QNetworkManager和QNetworkReply似乎并不智能。看起来我必须在返回的QByteArray上实现gzip和/或deflate。当您在
QNetworkRequest
对象上设置自定义Accept Encoding
原始头时(例如通过覆盖的QNetworkAccessManager::createRequest()
),QtWebKit
将不再解压缩回复:qhttpnetworkconnection.cpp的源代码:======================
// 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, deflate");
request.d->autoDecompress = true;
#else
// if zlib is not available set this to false always
request.d->autoDecompress = false;
#endif
请在其他地方阅读本文,以便在没有对其进行测试的情况下:不要自己设置接受编码的头,然后QNam应该透明地处理它(返回解压缩的负载)。我终于找到了一个问题的解决方案,这个问题花了我一周的时间。我对request.setRawHeader行进行了注释(“接受编码”、“gzip、deflate”);最终能够接收到soap消息。非常感谢。