【发布时间】:2015-03-30 18:12:40
【问题描述】:
对于某些下载 url,QNetworkReply 对象不包含 Content-Length 标头,并将文件大小返回为 -1。我测试了以下网址:
http://download-cf.jetbrains.com/webide/PhpStorm-EAP-141.332.tar.gz
在 Firefox 中 Live HTTP Headers 显示的 headers 如下:
HTTP/1.1 200 OK
Content-Type: application/x-tar
Content-Length: 135144452
Connection: keep-alive
Date: Mon, 30 Mar 2015 17:49:03 GMT
Content-Encoding: gzip
x-amz-meta-s3cmd-attrs: uid:572/gname:cds/uname:cds/gid:574/mode:33188/mtime:1427282503/atime:1427282968/md5:a2ccadce9ae0f356e9c11a6d5dd5a4f0/ctime:1427282503
Last-Modified: Wed, 25 Mar 2015 11:36:03 GMT
Etag: "db9a27ca51b84bac23080028b3e267ef-9"
Accept-Ranges: bytes
Server: AmazonS3
Age: 313
X-Cache: Miss from cloudfront
Via: 1.1 f94856caaa8ad33df4ddf975899fadd2.cloudfront.net (CloudFront)
X-Amz-Cf-Id: GFsaZTTMQ5eQ54JOUzBfJmIHL6AolKkXknb2HAcfbCKsbIYgdJng_Q==
当我执行以下操作时:
qDebug()<<reply->rawHeaderList();
输出是:
("Content-Type", "Connection", "Date", "Content-Encoding",
"x-amz-meta-s3cmd-attrs", "Last-Modified",
"ETag", "Accept-Ranges", "Server", "Age", "X-Cache",
"Via", "X-Amz-Cf-Id")
显然,缺少 Content-Length。那么,他们有什么解决方案吗?
【问题讨论】:
-
使用wireshark比较firefox和Qt的会话。然后使用 Qt 的调试版本(你必须自己构建它)并调试到网络代码中,看看为什么 Qt 没有获取内容长度。
标签: c++ qt http networking