Загрузите файл с помощью urllib в Python с wget-c функция

Я программирую программное обеспечение в Python для загрузки HTTP PDF с базы данных. Иногда остановка загрузки с этим сообщением:

retrieval incomplete: got only 3617232 out of 10689634 bytes

Как я могу попросить, чтобы загрузка перезапустила, где она прекращает использовать 206 Partial Content  Функция HTTP?

Я могу сделать это использование wget -c и это работает вполне прилично, но я хотел бы реализовать его непосредственно в моем программном обеспечении Python.

Какая-либо идея?

Спасибо

7
задан Natim 7 January 2010 в 15:46
поделиться

1 ответ

Вы можете запросить частичную загрузку, отправив GET с заголовком Range:

import urllib2
req = urllib2.Request('http://www.python.org/')
#
# Here we request that bytes 18000--19000 be downloaded.
# The range is inclusive, and starts at 0.
#
req.headers['Range'] = 'bytes=%s-%s' % (18000, 19000)
f = urllib2.urlopen(req)
# This shows you the *actual* bytes that have been downloaded.
range=f.headers.get('Content-Range')
print(range)
# bytes 18000-18030/18031
print(repr(f.read()))
# '  </div>\n</body>\n</html>\n\n\n\n\n\n\n'

Будьте внимательны, чтобы проверить Content-Range, чтобы узнать, какие байты были загружены на самом деле, так как ваш диапазон может быть вне пределов, и/или не все серверы, кажется, уважают заголовок Range.

.
7
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: