2010-01-07 3 views
7

데이터베이스에서 HTTP PDF를 다운로드하기 위해 Python으로 소프트웨어를 프로그래밍하고 있습니다. 가끔 다운로드가이 메시지와 함께 중지 :wget -c 기능을 사용하여 Python에서 urllib을 사용하여 파일 다운로드

retrieval incomplete: got only 3617232 out of 10689634 bytes 

는 어떻게는 206 Partial Content HTTP 기능을 사용하여 정지 위치를 다시 시작 다운로드를 요청할 수 있습니다 ?

나는 wget -c을 사용하여이를 수행 할 수 있으며 꽤 잘 작동하지만 내 Python 소프트웨어에서 직접 구현하고 싶습니다.

아이디어가 있으십니까?

감사합니다

답변

7

당신은 Range 헤더와 GET을 보내 부분 다운로드를 요청할 수 있습니다 : 당신의 범위 때문에,

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 헤더를 존중하지 않는 것으로 보입니다.

관련 문제