Подтверждение успешной загрузки HTTP в Python

StackOverflow https://stackoverflow.com/questions/1834004

  •  11-09-2019
  •  | 
  •  

Вопрос

Есть ли простой и надежный способ подтвердить успешное завершение загрузки из Интернета для загрузки с использованием Python или WGET [для больших файлов]?Я хочу убедиться, что файл загружен полностью, прежде чем выполнять другое действие.

Это было полезно?

Решение

Учитывая множество (на мой взгляд, большинство на практике) разделов заголовков HTTP/1.1, вы можете получить ожидаемую длину тела объекта.Если у вас есть такое ожидание, вы можете решить, получили ли вы все данные сущности.Видеть RFC 2616, раздел 4.4 для полной информации, но по сути:

  • иногда content-length точно отражает длину тела объекта
  • иногда тело объекта может отсутствовать, в зависимости от кода ответа или от того, отвечает ли ответ на HEAD запрос
  • иногда запрос закодирован для передачи;и в данных HTTP есть какой-то маркер, который говорит: «Я закончил» (Transfer-Encoding: chunked)
  • а иногда сообщение официально отправляется, когда соединение закрывается (в этом случае вы не можете отличить получение всего сообщения от преждевременного отключения)

Во всех случаях, кроме последнего, вы можете сказать, есть ли у вас все это или нет.Я не знаю, дает ли какой-либо конкретный инструмент (wget или существующая библиотека Python) вам легко интерпретируемый сигнал о том, что ваш ответ был или не был усечен.

Другие советы

HTTP не предоставляет возможности это проверить.

При распространении больших файлов используется способ: после загрузки вычислить сумму md5 файла и сравнить ее с суммой md5, предоставленной сервером.

Например, именно так Ubuntu распределяет и проверяет загрузку компакт-дисков. https://help.ubuntu.com/community/HowToMD5SUM

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top