我正在使用QNetworkManager从服务器获取文件,但是我无法弄清楚的是,如果文件在传输过程中使用标准gzip压缩进行压缩,如果不是如何让它们下载压缩文件。< / p>
我该如何检查?
答案 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应该透明地处理它(返回解压缩的有效负载)。