使用部分下载(HTTP)下载文件

Kon*_*tin 21 python http partial

有没有办法使用部分下载功能通过HTTP下载巨大且仍在增长的文件?

似乎这段代码每次执行时都会从头开始下载文件:

import urllib
urllib.urlretrieve ("http://www.example.com/huge-growing-file", "huge-growing-file")
Run Code Online (Sandbox Code Playgroud)

我想要:

  1. 仅获取新写入的数据
  2. 仅在源文件变小(例如已旋转)时从头开始下载.

Nad*_*mli 42

可以使用范围标题进行部分下载,以下内容将请求选定的字节范围:

req = urllib2.Request('http://www.python.org/')
req.headers['Range'] = 'bytes=%s-%s' % (start, end)
f = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)

例如:

>>> req = urllib2.Request('http://www.python.org/')
>>> req.headers['Range'] = 'bytes=%s-%s' % (100, 150)
>>> f = urllib2.urlopen(req)
>>> f.read()
'l1-transitional.dtd">\n\n\n<html xmlns="http://www.w3.'
Run Code Online (Sandbox Code Playgroud)

使用此标题,您可以恢复部分下载.在您的情况下,您所要做的就是跟踪已下载的大小并请求新的范围.

请记住,服务器需要接受此标头才能使其正常工作.

  • 此外,您还必须检查Content-Range标头(它可能与您请求的范围不同),并且可能已准备好解析multipart/byteranges主体. (2认同)
  • 检查multipart/byteranges方面.规范明确禁止对单个范围请求的multipart/byteranges响应. (2认同)
  • 要从一个位置(典型情况)中检索其余部分,只需使用`"bytes =%d-"`(即只是没有结束值). (2认同)