2015-11-03 83 views
0
curl -v -r 0-500 http://somefile -o localfile 

它应该只下载第一个501字节,不是?相反,它只是下载整个事情。全部67兆字节。感谢卷发!我的公司代理服务器能否以某种方式阻止此功能?我对此持怀疑态度,因为下载本身确实有效,而不是范围功能。我错过了什么吗?卷曲范围不起作用(下载整个文件)

+0

哪个web服务器?它接受范围? Web服务器在发出“HEAD”请求时返回“Content-Length”,例如'curl -I http:// somefile /'。 – racetrack

+0

它是一个国家的天气服务数据服务器,这个东西是例行公事的,而且之前我从其他服务器上为我工作过。 卷曲-I的http:// 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 Content-Type:text/plain;字符集= UTF-8 接受范围:字节 缓存控制:max-age = 14400最后修改:2015年11月3日星期二15:39:05 GMT 内容长度:70306931 X帧选项: SAMEORIGIN 代理连接:Keep-Alive X-XSS-Protection:1; mode = block X-Content-Type-Options:nosniff –

+0

当你在curl中使用'-r'标志时,你能在请求标题中看到'Range'吗?如果你手动添加标题,例如'curl -H“,会发生什么情况:bytes = 0-500”...... – racetrack

回答

1

它应该只下载第一个501字节,不是?

这取决于服务器。从man curl

你也应该知道,许多HTTP/1.1服务器没有启用此功能,这样,当你试图获得一定范围内,你会得到,而不是整个文件。

正如您在服务器的响应中看到的那样,它使用的是HTTP/1.1。所以服务器端不支持范围功能并不奇怪。

+0

它在这个服务器上工作,我的其他客户端没有这个问题,它是无法处理的这个特定的客户端 - 范围 –

0

作为一个客户,当你收到你想要的东西时,你总是可以中止下载。

通过使用头,你将能够下载限制为500个字节,即使服务器不接受的范围内,头

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

如果我不一定想要第一个500,那么这个工作将如何工作?如:curl -r 8000-50000 –

+0

我想你可以这样做:curl ... | head -c 50000 | tail -c 42000> localfile,它会下载第一个50000字节,然后截取你不想要的第一个8000。 ,你仍然会浪费带宽。 –