Подтверждение успешной загрузки HTTP в Python - PullRequest
1 голос
/ 02 декабря 2009

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

Ответы [ 2 ]

3 голосов
/ 02 декабря 2009

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

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

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

1 голос
/ 02 декабря 2009

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

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

Пример, вот как ubuntu распространяет и проверяет их загрузки CD. https://help.ubuntu.com/community/HowToMD5SUM

...