@hexelot

Почему выдает ошибка HTTP Error 301?

Есть скрипт скачивающий файлы с возобновлением загрузки если сервер сбрасывает соединение. Но есть ошибка которая часто появляется после 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 - пусть и имя файла для сохранения
  • Вопрос задан
  • 318 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы