【问题标题】:Curl range not working(downloads entire file)卷曲范围不起作用(下载整个文件)
【发布时间】:2015-11-03 17:44:46
【问题描述】:
curl -v -r 0-500 http://somefile -o localfile

它应该只下载前 501 个字节,不是吗?相反,它只是下载整个内容。全部 67 兆字节。谢谢卷曲!我的公司代理服务器会以某种方式阻止此功能吗?我对此持怀疑态度,因为下载本身确实有效,而不是范围功能。我错过了什么吗?

【问题讨论】:

  • 哪个网络服务器?它接受范围吗?发出HEAD 请求时,Web 服务器是否返回Content-Length - 例如curl -I http://somefile/
  • 它是一个国家气象服务数据服务器,这个东西是例行的,并且以前在我的其他服务器上为我工作过。 curl -I somefile HTTP/1.1 200 OK 日期:2015 年 11 月 3 日星期二 17:54:11 GMT ETag:“502c233-430cc73-523a4b19e5ce6”服务器:Apache 到期:2015 年 11 月 3 日星期二 21:54:11 GMT 内容-类型:文本/纯文本; charset=UTF-8 Accept-Ranges: bytes Cache-Control: max-age=14400 Last-Modified: Tue, 03 Nov 2015 15:39:05 GMT Content-Length: 70306931 X-Frame-Options: SAMEORIGIN Proxy-Connection: Keep-Alive X-XSS-Protection:1; mode=block X-Content-Type-Options: nosniff
  • 当您在 curl 中使用 -r 标志时,您能在请求标头中看到 Range 吗?如果您手动添加标题会发生什么 - 例如,curl -H "Range: bytes=0-500" ...
  • curl -H "Range: bytes=0-500 : 没有变化。仍然下载了全部 67MB

标签: bash curl


【解决方案1】:

作为客户端,您可以在收到所需内容后中止下载。

通过使用 head,即使服务器不接受 range-header,您也可以将下载限制为 500 字节

curl -v -r 0-500 http://somefile |head -c 500 > localfile

【讨论】:

  • 如果我不一定想要前 500 个,这会起作用吗?如:curl -r 8000-50000
  • 我猜你可以这样做:curl... | head -c 50000|tail -c 42000 > localfile,它将下载前 50000 个字节,然后删除您不想要的前 8000 个字节。所以不是真的,你仍然会浪费带宽。
【解决方案2】:

它应该只下载前 501 个字节,不是吗?

这取决于服务器。来自man curl

您还应该知道,许多 HTTP/1.1 服务器没有启用此功能,因此当您尝试获取范围时,您将获取整个文档。

正如您在服务器的响应中看到的,它使用的是 HTTP/1.1。所以服务器端不支持范围功能也就不足为奇了。

【讨论】:

  • 它在这个服务器上工作。我的其他客户这样做没有问题。它的这个特定客户端无法处理 -range
【解决方案3】:

请使用以下命令

curl -H "范围:字节=354-500" -O http://example.com/file.extension

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多