部分ダウンロード(HTTP)を使用してファイルをダウンロードする 質問する

部分ダウンロード(HTTP)を使用してファイルをダウンロードする 質問する

部分ダウンロード機能を使用して、巨大でまだ増加中のファイルを HTTP 経由でダウンロードする方法はありますか?

このコードは実行されるたびにファイルを最初からダウンロードするようです:

import urllib
urllib.urlretrieve ("http://www.example.com/huge-growing-file", "huge-growing-file")

私は…したい:

  1. 新しく書き込まれたデータだけを取得するには
  2. ソース ファイルが小さくなった場合 (たとえば、回転された場合) のみ、最初からダウンロードします。

ベストアンサー1

範囲ヘッダーを使用して部分的なダウンロードを行うこともできます。次のようにすると、選択したバイト範囲が要求されます。

req = urllib2.Request('http://www.python.org/')
req.headers['Range'] = 'bytes=%s-%s' % (start, end)
f = urllib2.urlopen(req)

例えば:

>>> req = urllib2.Request('http://www.python.org/')
>>> req.headers['Range'] = 'bytes=%s-%s' % (100, 150)
>>> f = urllib2.urlopen(req)
>>> f.read()
'l1-transitional.dtd">\n\n\n<html xmlns="http://www.w3.'

このヘッダーを使用すると、部分的なダウンロードを再開できます。この場合、既にダウンロードされたサイズを追跡し、新しい範囲を要求するだけです。

これが機能するには、サーバーがこのヘッダーを受け入れる必要があることに注意してください。

おすすめ記事