在Python中使用urllib下载带有wget -c功能的文件
我正在用Python编写一个软件,从数据库下载HTTP格式的PDF文件。有时候,下载会停止,并显示以下信息:
retrieval incomplete: got only 3617232 out of 10689634 bytes
我该如何利用206 Partial Content
这个HTTP特性,让下载从停止的地方重新开始呢?
我可以使用wget -c
来实现这个功能,而且效果很好,但我想直接在我的Python软件中实现这个功能。
有什么想法吗?
谢谢
1 个回答
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
头的指示。