Python http下载使用requests.get始终缺少块
我试图定义一个函数,如果连接中断,它将恢复下载。但是,以下操作并不像预期的那样有效。 在第8行中,我必须手动推断一个块大小,以使其正常工作,否则,每次我恢复最终文件时,它都会丢失一个块大小Python http下载使用requests.get始终缺少块,python,download,python-requests,Python,Download,Python Requests,我试图定义一个函数,如果连接中断,它将恢复下载。但是,以下操作并不像预期的那样有效。 在第8行中,我必须手动推断一个块大小,以使其正常工作,否则,每次我恢复最终文件时,它都会丢失一个块大小 if os.path.exists(fileName): header = requests.head(url) fileLength = int(header.headers['Content-Length']) if fileLength == os.path.getsize(fi
if os.path.exists(fileName):
header = requests.head(url)
fileLength = int(header.headers['Content-Length'])
if fileLength == os.path.getsize(fileName):
return True
else:
with open(fileName, 'ab') as f:
position = f.tell()-1024
pos_header = {}
print(position)
pos_header['Range'] = f'bytes={position}-'
with requests.get(url, headers = pos_header, stream = True) as r:
with open(fileName, 'ab') as f:
#some validation should be here
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(r.content)
f.flush()
print(os.path.getsize(fileName))
else:
with requests.get(url, allow_redirects=True, stream = True) as r:
with open(fileName, 'wb') as f:
iter = 0
for chunk in r.iter_content(chunk_size = 1024):
if chunk:
f.write(chunk)
f.flush()
iter += 1
if iter > 2000:
break
有趣的是,缺少的部分位于下载的两部分之间。有没有比我所做的更优雅的方法来解决这个问题?如果是第二次尝试,代码中会有一个bug下载文件的“其余部分”。错误出现在以下行中:
f.write(r.content)
应该是
f.write(chunk)
基本上,你是在重复块,但写整个内容,这会把事情搞砸 如果是第二次尝试,下载文件“其余部分”的代码中有一个bug。错误出现在以下行中:
f.write(r.content)
应该是
f.write(chunk)
基本上,你是在重复块,但写整个内容,这会把事情搞砸 你有没有一个页面可以让你轻松地测试它?大多数页面没有内容长度。是的,在url=''处找到了一个随机的10秒视频。它具有所需的所有https支持。您是否有允许轻松测试此功能的页面?大多数页面没有内容长度。是的,在url=''处找到了一个随机的10秒视频。它具有所需的所有https支持。