我使用python 2.7请求模块使用以下代码下载二进制文件,如何制作此代码" auto-resume"从部分下载的文件下载。
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
模块来实现这一目标。
答案 0 :(得分:19)
如果Web服务器支持范围请求,那么您可以将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)