有什么方法可以从链接下载文件的特定部分?

时间:2019-05-17 17:34:24

标签: network-programming python-requests wget

我要尝试下载的文件大小约为8gb,网址为:www.cs.jhu.edu/~anni/ALNC/030314corpus.splittoklc.tgz

但是,服务器每隔几秒钟就会关闭我的连接,使我只能以我的连接速度下载50-90MB的文件。我也交换了ip地址,但行为相同。其他人也会发生这种情况吗?

这是我从wget获得的输出

enter image description here

我想知道是否可以像wget头几次一样自动重置连接?现在不久后它就冻结了。

或者,有没有办法我可以使用wget或python的requests包或其他语言来收集文件的不同部分?


更新:

我在手机上尝试了此操作,尽管运行很慢,但它似乎仍然工作。为什么会发生这种情况以及如何解决的任何想法?

更新:

电话连接最终也会重置,并且由于文件太大,因此我无法完成。

1 个答案:

答案 0 :(得分:1)

初步

要使这一切正常工作,服务器需要支持范围请求,并以206 Partial Content进行响应。从终端输出来看,该服务器似乎有支持。

您的问题

  

但是,服务器每隔几秒钟就会关闭我的连接,使我只能以我的连接速度下载50-90MB的文件。我也交换了ip地址,但行为相同。其他人也会发生这种情况吗?

不,下载对我来说没有大问题。我测试过

curl www.cs.jhu.edu/~anni/ALNC/030314corpus.splittoklc.tgz > /dev/null
  

我想知道是否可以像wget头几次一样自动重置连接?

wget似乎已自动重试了下载。在您包含的终端输出中,似乎wget最终将“到达那里”。您可以使用wget --continue [URL]使wget继续下载不完整的下载。

  

或者,有没有一种方法可以使用wget或python的request软件包或其他某种语言来收集文件的不同部分?

从wget 1.16开始,您可以使用wget --start-pos 500 [URL]从指定位置开始下载。

您还可以使用curl -r 500-1000 [URL]下载给定范围内的字节。

对于Python的requests模块,按照this SO answer

import requests

headers = {"Range": "bytes=0-100"}
r = requests.get("https://example.com/link", headers=headers)

更多信息的关键字

此处用于进一步搜索的关键字应该是“范围请求”,“部分下载”,“ 206”。