在网站上获取文件的修改日期,且不使用Last-Modified头值
我正在尝试写一个bash脚本,这个脚本可以检查一个远程网站上文件的修改日期,如果这个文件比我本地的版本更新,就下载这个文件。目前脚本的一部分已经写好了,这部分使用了HTTP头中的Last-Modified参数。我需要一个备用方案,以防这个Last-Modified参数在头信息中不可用。有没有人知道用bash脚本或python有什么方法可以在不使用Last-Modified参数的情况下获取网站上文件的最后修改日期?
谢谢。
詹姆斯
3 个回答
0
如果你通过http获取数据,并不能保证你请求的内容对应一个实际的文件或者其他有“最后修改”日期概念的东西。所以在http协议中,除了“最后修改时间”这个信息外,没有其他方法可以知道这些内容的修改情况。你可能希望在本地没有足够新的副本时去获取这个文件,而“足够新”这个标准需要你自己来决定。
如果你在主机上有用户账号,并且可以通过ssh或类似方式远程登录,那么你可能可以查看实际文件的修改日期。
0
在我看来,你实际上是在维护一个缓存。HTTP不仅仅有Last-Modified
这个头信息来帮助缓存,但其中的逻辑并不是那么简单。W3C有一篇讨论,讲述如何实现缓存,你可能会觉得这很有帮助。
2
正如其他人提到的,依靠“最后修改时间”这个头信息来判断文件上次更新的时间是很难信任的。
如果你不介意下载整个文件的内容,可以存储这个文件的md5哈希值。如果在后续的请求中这个哈希值不同了,那就说明文件的内容发生了变化。
在Bash命令行中,你可以这样做:
curl -s www.google.com | md5
使用非常棒的Python Requests库:
import requests
import hashlib
r = requests.get('http://www.example.com')
hash = hashlib.md5(r.text).hexdigest()