QNetworkManager默认是否接受压缩回复?

时间:2010-02-26 09:26:06

标签: iis qt qt4 compression

我正在使用QNetworkManager从服务器获取文件,但是我无法弄清楚的是,如果文件在传输过程中使用标准gzip压缩进行压缩,如果不是如何让它们下载压缩文件。< / p>

我该如何检查?

5 个答案:

答案 0 :(得分:2)

我刚刚添加了一个快速测试:

request.setRawHeader("Accept-Encoding", "gzip,deflate");

到QNetworkRequest并且数据返回看起来压缩的内容(因为它小〜20%更小且无法使用)。

就解压缩而言,QNetworkManager和QNetworkReply似乎并不智能。看起来我必须在返回的QByteArray上实现gzip和/或deflate。

答案 1 :(得分:1)

session_start(); $jsonFile = 'foobar.json'; $jsonArray = json_decode(file_get_contents($jsonFile), true); $theIP = $_SERVER['REMOTE_ADDR']; $addMin = 1; // set value for testing purposes $addHour = 0; // set value for testing purposes $targetedHits = 5; // set value for testing purposes $timeLater = time() + ($addMin*60) + ($addHour*60*60); if (empty($_SESSION['count'])) { $_SESSION['expire'] = $timeLater; } if (!empty($theIP) && !empty($jsonArray)) { // look for the $theIP if (in_array($theIP,array_column($jsonArray,'ip'))) { $_SESSION['count'] = 0; session_destroy(); echo 'IP found in json'; exit; } if (time() < $_SESSION['expire']) { echo 'below the time '; $_SESSION['count'] = isset($_SESSION['count'])? $_SESSION['count'] + 1 : 1; if ($_SESSION['count'] > $targetedHits) { echo 'session count reached max '; $jsonArray[] = [ 'ip' => $theIP, 'date' => date("H:i"), 'time' => date("m.d.y") ]; // save changes file_put_contents($jsonFile,json_encode($jsonArray)); unset($_SESSION['count']); session_destroy(); exit; } } elseif (time() > $_SESSION['expire']) { echo 'nuking session and counter'; $_SESSION['count'] = 0; unset($_SESSION['expire']); } } echo '<pre>'; var_dump($_SESSION); echo '</pre>'; 对象上设置自定义Accept-Encoding原始标头时(例如通过重写的QNetworkRequest),QNetworkAccessManager::createRequest()将永远不会解压缩回复:源代码QtWebKit:====================

qhttpnetworkconnection.cpp

答案 2 :(得分:0)

您应该使用数据包嗅探器/网络分析器并自行检查。

QNetworkAccessManager支持接收压缩的HTTP回复,因此理论上如果正确设置了HTTP服务器,它应该可以正常工作。

答案 3 :(得分:0)

考虑下面的句子,我会说不,但它们可以是:

  

downloadProgress()信号也是   收到数据时发出的,但是   其中包含的字节数可以   不代表实际的字节数   收到,如果有任何转变   完成内容(例如,   解压缩和删除   协议开销)。

您可以在此处找到它:http://doc.trolltech.com/4.6/qnetworkreply.html

我没试过它!

要压缩,如果我记得很清楚,你可以发送QByteArray ......在这种对象上,你可以使用“压缩”......

您还可以查看一些Qt示例,例如:

http://doc.trolltech.com/4.6/network-broadcastsender.html

我没有看所有这些,但也许你会找到一些有趣的东西!

希望它有所帮助!

答案 4 :(得分:0)

在其他地方阅读它,以便对其进行测试:只是不要自己设置接受编码的标头,然后QNam应该透明地处理它(返回解压缩的有效负载)。