在网站上获取文件的修改日期,且不使用Last-Modified头值

3 投票
3 回答
3192 浏览
提问于 2025-04-17 04:07

我正在尝试写一个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()

撰写回答