我正在用 Python 编写一个软件来从数据库下载 HTTP PDF。有时下载会因此消息而停止:
retrieval incomplete: got only 3617232 out of 10689634 bytes
我如何要求下载在停止使用206 Partial Content
HTTP 功能的地方重新启动?
我可以使用wget -c
它来实现它并且效果很好,但我想直接在我的 Python 软件中实现它。
任何的想法 ?
谢谢
您可以通过发送带有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
标头。