使用wget -c功能在Python中使用urllib下载文件

时间:2010-01-07 15:46:43

标签: python http download urllib2 urllib

我正在使用Python编程软件以从数据库下载HTTP PDF。 有时下载会停止并显示以下消息:

retrieval incomplete: got only 3617232 out of 10689634 bytes

如何使用206 Partial Content HTTP功能让下载重新启动呢?

我可以使用wget -c来做它并且效果很好,但我想直接在我的Python软件中实现它。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分: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标头。