如何在Python中恢复文件下载?

28 投票
1 回答
19566 浏览
提问于 2025-04-18 01:35

我正在使用 Python 2.7 的 requests 模块来下载一个二进制文件,下面是我用的代码。我想知道怎么让这段代码在下载中断后能够自动从已经下载的部分继续下载。

r = requests.get(self.fileurl, stream=True,  verify=False, allow_redirects=True)
if r.status_code == 200:
    CHUNK_SIZE = 8192
    bytes_read = 0
    with open(FileSave, 'wb') as f:
        itrcount=1
        for chunk in r.iter_content(CHUNK_SIZE):
            itrcount=itrcount+1
            f.write(chunk)
            bytes_read += len(chunk)
            total_per = 100 * float(bytes_read)/float(long(audioSize)+long(videoSize))


            self.progress_updates.emit('%d\n%s' % (total_per, 'Download Progress : ' + self.size_human(itrcount*CHUNK_SIZE) + '/' + Total_Size))
r.close()

如果可能的话,我希望只使用 requests 模块来实现这个功能。

1 个回答

33

如果你的网页服务器支持范围请求,那么你可以在请求中添加一个叫做Range的头部信息:

Range: bytes=StartPos-StopPos

这样你就能收到从StartPos到StopPos之间的内容。如果你不知道StopPos是什么,可以直接使用:

Range: bytes=StartPos-

所以你的代码可以写成:

def resume_download(fileurl, resume_byte_pos):
    resume_header = {'Range': 'bytes=%d-' % resume_byte_pos}
    return requests.get(fileurl, headers=resume_header, stream=True,  verify=False, allow_redirects=True)

撰写回答