部分ダウンロード機能を使用して、巨大でまだ増加中のファイルを HTTP 経由でダウンロードする方法はありますか?
このコードは実行されるたびにファイルを最初からダウンロードするようです:
import urllib
urllib.urlretrieve ("http://www.example.com/huge-growing-file", "huge-growing-file")
私は…したい:
- 新しく書き込まれたデータだけを取得するには
- ソース ファイルが小さくなった場合 (たとえば、回転された場合) のみ、最初からダウンロードします。
ベストアンサー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.'
このヘッダーを使用すると、部分的なダウンロードを再開できます。この場合、既にダウンロードされたサイズを追跡し、新しい範囲を要求するだけです。
これが機能するには、サーバーがこのヘッダーを受け入れる必要があることに注意してください。