使用Python中的urllib下载文件,并使用wget -c功能

7
我正在使用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头。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接