代码之家  ›  专栏  ›  技术社区  ›  Phil Hannent

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

  •  2
  • Phil Hannent  · 技术社区  · 14 年前

    我正在使用 QNetworkManager 但是,要从服务器获取文件,我无法确定的是,文件是否在传输过程中使用标准gzip压缩进行了压缩,如果没有,如何让它们下载压缩的文件。

    我该怎么检查呢?

    5 回复  |  直到 6 年前
        1
  •  2
  •   Phil Hannent    14 年前

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

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

    到qnetworkrequest,数据返回看起来被压缩的内容(因为它大约小了20%,不可用)。

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

        2
  •  1
  •   Jake Cobb    6 年前

    当你设置一个自定义 Accept-Encoding 上的原始标题 QNetworkRequest 对象(例如通过重写 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
    
        3
  •  0
  •   guruz    14 年前

    你应该使用一个包嗅探器/网络分析仪,并检查自己。

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

        4
  •  0
  •   Andy M    14 年前

    考虑到下面这句话,我想说不,但它们可以是:

    downloadprogress()信号也是 当接收到数据时发出,但是 可能包含的字节数 不代表实际字节 接收,如果任何转换是 对内容执行(例如, 减压并移除 协议开销)。

    你可以在这里找到它: http://doc.trolltech.com/4.6/qnetworkreply.html

    我没有测试过!

    为了压缩,如果我记得很好,你可以发送Qbytearray…在这种物体上,你可以用“压缩”…

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

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

    我没有全看,但也许你会发现一些有趣的东西!

    希望有帮助!

        5
  •  0
  •   charlie    6 年前

    在其他地方阅读本文,因此不需要测试它:不要自己设置接受编码的头,qnam应该透明地处理它(返回解压缩的负载)。