在不使用Last-Modified标头值的情况下在网站上获取文件的修改日期

时间:2011-10-11 21:31:06

标签: python html bash shell

我正在尝试编写一个bash shell脚本,该脚本将评估远程网站上文件的修改日期,如果文件比本地副本更新,则下载该文件。部分脚本已经编写完成。已开发的部件使用标头Last-Modified参数。如果标题中没有Last-Modified参数,我需要有一个替代方案。有没有人知道使用bash shell脚本或python的方式来获取网站上文件的最后修改日期而不使用标题中的Last-Modified参数?

感谢。

詹姆斯

3 个答案:

答案 0 :(得分:2)

正如其他人在此处提到的那样,很难在上次更新文件时信任Last-Modified标头。

如果您不介意下载文件的完整内容,则可以存储文件的md5哈希值。如果后续调用不同,则表示文件内容已更改。

从Bash shell中,你可以这样做:

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()

答案 1 :(得分:0)

如果您通过http检索数据,则无法保证您所请求的内容与物理文件或其他任何具有“上次修改”日期概念的内容相对应,因此在http协议中没有办法(除了Last-Modified)知道。如果你没有足够的最新本地副本,你可能想要检索文件 - 你必须根据你的目的决定“最近的”是什么。

如果您在主机上有用户帐户并且可以通过ssh或类似方式远程登录,则可以检查实际文件的模式日期。

答案 2 :(得分:0)

正如我所看到的,你基本上都在维护一个缓存。 HTTP不仅仅具有Last-Modified标头以便于缓存,但逻辑并非如此简单。 W3C有discussion如何实现您可能会发现有用的缓存。