Есть скрипт скачивающий файлы с возобновлением загрузки если сервер сбрасывает соединение. Но есть ошибка которая часто появляется после 90-95% загрузки:
urllib.error.HTTPError: HTTP Error 301: The HTTP server returned a redirect error that would lead to an infinite loop. The last 30x error message was: Moved Permanently
Погуглил нашел что это из-за куки, решение был такой код
cj = CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
И ура работает, но не долго. После пару раз загрузок опять выдает ту самую ошибку. Не заню с чем это связано.
Вот полный скрипт:
import urllib.request
from http.cookiejar import CookieJar
req = urllib.request.Request(URL)
cj = CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
u = opener.open(req)
meta = u.info()
f = open(NAME, 'wb')
file_size = int(meta.get_all("Content-Length")[0])
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer and file_size_dl < file_size:
print("\n\nСервер сбросил соединение. Возобновление загрузки.\n\n")
req.headers["Range"] = "bytes=%s-%s" %(file_size_dl, file_size)
u = urllib.request.urlopen(req)
elif not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
sys.stdout.write("\rЗагружено: %3.2f%%, %d байт" % (file_size_dl * 100. / file_size, file_size_dl))
sys.stdout.flush()
f.close()
URL - ссылка на файл
NAME - пусть и имя файла для сохранения