Python中确认HTTP下载成功的方法
有没有简单又可靠的方法来确认用Python或WGET下载的大文件是否成功下载完成?我想确保文件已经完整下载好,然后再进行其他操作。
2 个回答
2
HTTP协议本身并没有提供检查文件完整性的方法。
通常在分发大文件时,我们会在下载完成后计算一下这个文件的md5值,然后把它和服务器提供的md5值进行对比。
举个例子,Ubuntu就是这样来分发和检查他们的CD下载的。你可以查看这个链接了解更多信息:https://help.ubuntu.com/community/HowToMD5SUM
3
在很多情况下(我认为大多数情况下),HTTP/1.1的头部信息可以让你大致知道实体内容的长度。如果你知道了这个长度,你就能判断自己是否收到了完整的数据。想了解更多细节,可以查看RFC 2616第4.4节,但简单来说:
- 有时候,
content-length
会准确地告诉你实体内容的长度。 - 有时候,可能根本没有实体内容,这取决于响应的状态码,或者如果响应是对
HEAD
请求的回应。 - 有时候,请求是经过传输编码的;在HTTP数据中会有一个标记表示“我已经完成了”(
Transfer-Encoding: chunked
)。 - 还有时候,消息在连接关闭时才算结束(这样的话,你就无法判断自己是收到了完整的内容还是被提前截断了)。
除了最后一种情况,其他情况下你都能判断自己是否收到了完整的数据。我不太确定有没有哪个工具(比如wget或者现有的Python库)能给你一个容易理解的信号,告诉你响应是否被截断。