[英]Python http download using requests.get always missing a chunk
我正在嘗試定義一個 function ,如果連接斷開,它將恢復下載。 但是,以下內容無法按預期工作。 在第 8 行中,我必須手動推導出一個塊大小才能使其工作,否則,每次我恢復最終文件時,最終文件都會丟失一個塊大小。
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
有趣的是,缺少的部分是下載的兩個部分之間。 有沒有比我做的更優雅的方法來解決這個問題?
如果這是第二次嘗試,您的代碼中有一個錯誤,它會下載文件的“其余部分”。 該錯誤位於以下行中:
f.write(r.content)
它應該是
f.write(chunk)
基本上,您正在迭代塊,但要編寫整個內容,這會使事情變得混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.