Hug*_*lpz 6 gis curl wget web-crawler
给定一个在线文件,我可以通过网络浏览器下载该文件。
\n\n我curl在上面运行了一个
mkdir -p ./data\ncurl -L -C - 'http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/ice_surface/grid_registe\xe2\x80\x8c\xe2\x80\x8bred/netcdf/readme_etopo1_netcdf.txt' -o ./data/countries.zip \nRun Code Online (Sandbox Code Playgroud)\n\n我收到以下错误消息:
\n\n\n\n\ncurl: (33) HTTP 服务器似乎不支持字节范围。无法恢复。\n
\n
如何解决这个问题?欢迎其他下载工具。
\n\n笔记:
\n\n-L: 遵循重定向-C -:继续之前未完成的下载编辑:当要下载的文件已经存在并且已经完成时,会出现此错误消息。它还会停止正在进行的脚本。我的要求是:
\n\n我怎么能这样做呢?
\n我尝试运行此命令两次:
curl -L -C - 'http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_sovereignty.zip' -o countries.zip
Run Code Online (Sandbox Code Playgroud)
并得到以下输出:
$ 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
Run Code Online (Sandbox Code Playgroud)
所以,看起来“简历”工作正常。自从您在 5 月份发布了这个问题以来,cURL 完全有可能已经修复了他们的错误,或者有问题的网络服务器已经更新了对 HTTP 范围请求的支持。
正如您在评论中指出的,ngdc.noaa.gov 网站仍然存在该错误。我检查了我的卷曲,它也在做同样的事情。因此这个bug仍然存在于curl中。
我使用 Wireshark 检查了 HTTP 协议中发生的情况。基本上,当curl发出恢复已完成文件的请求时,服务器会发回HTTP 416错误(“请求的范围无法满足”)。对于naturalearthdata.com,他们使用的CDN 添加了一个Content-Range 标头,指定文件的确切长度。ngdc.noaa.gov 不添加此标头。请注意,根据 RFC 2616,在 HTTP 416 响应中添加 Content-Range 是可选的。
curl 使用 Content-Range 来确定下载是否完成。如果标头丢失,curl 会假定服务器不支持范围下载并输出该错误消息。
我已将此作为错误报告给 libcurl 邮件列表。我们会看看他们怎么说。与此同时,这里有两种可能的解决方法:
aria2c经常使用,这是一个非常好的命令行下载实用程序,支持多个连接和恢复下载。它可以通过利用更多的连接来使您的下载速度更快(假设服务器支持它),并且我已经检查过 aria2c 不会遇到与curl相同的错误。curl -I <URL> | grep Content-Length | cut -d' ' -f 2获取文件的长度,并在运行之前检查下载的文件大小curl。| 归档时间: |
|
| 查看次数: |
26188 次 |
| 最近记录: |