&引用;Curl:(33)HTTP服务器不';t似乎不支持字节范围。无法恢复。”;

&引用;Curl:(33)HTTP服务器不';t似乎不支持字节范围。无法恢复。”;,curl,gis,wget,web-crawler,Curl,Gis,Wget,Web Crawler,提供一个在线文件,我可以通过web浏览器下载该文件 我用 mkdir -p ./data curl -L -C - 'http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/ice_surface/grid_registe‌​red/netcdf/readme_etopo1_netcdf.txt' -o ./data/countries.zip 我选择了以下错误消息: curl:(33)HTTP服务器似乎不支持字节范围。不能 恢复 如何解

提供一个在线文件,我可以通过web浏览器下载该文件

我用

mkdir -p ./data
curl -L -C - 'http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/ice_surface/grid_registe‌​red/netcdf/readme_etopo1_netcdf.txt' -o ./data/countries.zip 
我选择了以下错误消息:

curl:(33)HTTP服务器似乎不支持字节范围。不能 恢复

如何解决此问题?欢迎使用其他下载工具


注:

  • -L
    :遵循重定向
  • -C-
    :继续先前未完成的下载

编辑:当要下载的文件已存在且已完成时,将显示此错误消息。它还会停止正在进行的脚本。我的要求是:

  • 如果文件不存在,请下载
  • 如果文件确实存在但不完整,请在停止下载的位置继续下载
  • 如果文件确实存在且已完成,以静默方式传递到下一个命令。(没有失败)

我怎么能这样做呢?

如果web服务器不支持特定字节范围的请求,您就不能使用-C,而该主机似乎就是这样

如果尝试安装节点版本但安装失败,请确保从中删除节点下载

src (~/.nvm/src/)
或者,再次尝试重新安装时可能会出现错误,或者可能会出现如下错误:

curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume.

一定要让我知道它是否有效,否则我会建议您做其他事情。

我尝试运行此命令两次:

curl -L -C - 'http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_sovereignty.zip' -o countries.zip
并得到以下输出:

$ curl -L -C - 'http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_sovereignty.zip' -o countries.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 5225k  100 5225k    0     0   720k      0  0:00:07  0:00:07 --:--:--  836k
$ curl -L -C - 'http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_sovereignty.zip' -o countries.zip
** Resuming transfer from byte position 5351381
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
$ echo $?
0
所以,看起来“简历”很好用。由于您在五月份发布了这个问题,所以完全有可能cURL已经修复了他们的bug,或者所讨论的web服务器已经更新了他们对HTTP范围请求的支持


正如您在评论中所指出的,ngdc.noaa.gov网站仍然存在该漏洞。我检查了我的卷发,它也在做同样的事情。因此,这只虫子仍然卷曲着

通过Wireshark,我检查了HTTP协议中发生了什么。基本上,当curl请求恢复完成的文件时,服务器会发回一个HTTP416错误(“请求的范围不可满足”)。在naturalearthdata.com中,他们使用的CDN添加了一个内容范围头,指定文件的确切长度。ngdc.noaa.gov不添加此标题。注意,根据RFC 2616,在HTTP 416响应中添加内容范围是可选的

curl使用contentrange来确定下载是否完成。如果缺少标头,curl会假定服务器不支持范围下载,并抛出该错误消息

我已经向libcurl邮件列表报告了这个bug。我们看看他们怎么说。同时,这里有两种可能的解决方法:

  • 使用不同的下载程序。我经常使用
    aria2c
    ,这是一个非常好的命令行下载工具,支持多个连接和恢复下载。通过利用更多的连接(假设服务器支持),它可能会使您的下载速度更快,我已经检查过aria2c没有遭受与curl相同的错误
  • 在运行
    curl
    之前,使用
    curl-I | grep Content Length | cut-d''-f2来获取文件的长度,并根据下载的文件大小检查该长度

作为一种解决方法,首先检查目标文件是否不存在。

昨天正在工作。这可能与我的新位置和新wifi有关。除非你真的试图继续现有的下载,否则这对我来说就像一个bug,你应该向cUrl的人提交一份bug报告。即使您试图继续现有的下载,理论上,如果服务器不支持范围标头,它也应该返回到下载完整的文件。@darnir:检查后,当下载目标已经存在并且完成时,它会出现错误。问题是,这个错误完全停止了我较长的makefile工作流。Node与这个问题有什么关系?服务器支持继续不完整的下载吗?也就是说,如果你下载了一个文件,并在中途按Ctrl+C组合键,你能继续吗?如果是这样,那么您现在看到的肯定是一个cURL bug。是的,服务器肯定会接受继续未完成的下载。然而,当下载已经完成并且curl请求再次发送时,curl会返回这个精确的错误。它应该注意完整性并发送一条成功消息http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_sovereignty.zip“-o countries.zip
两次。第二次,cURL只给出了从字节位置5351381恢复传输的
**命令,并在没有下载任何内容的情况下成功退出。你的卷发可能过时了吗?我正在运行
curl 7.37.0
@nneonneo:你能用这个命令再次尝试相同的命令(下载、停止、恢复、完成、重新下载)(bug回来了?)吗?这个bug出现在我的版本上,带有这个URL。所以,我更新了我的答案,并向curl报告了一个bug。现有文件不会告诉您是完整的还是不完整的,这是导致bug的原因。是的,这不是bug的解释,而是解决问题并继续的快速解决方法。