Python 在不使用上次修改的标题值的情况下获取网站上文件的修改日期

Python 在不使用上次修改的标题值的情况下获取网站上文件的修改日期,python,html,bash,shell,Python,Html,Bash,Shell,我正在尝试编写一个bashshell脚本,该脚本将计算远程网站上文件的修改日期,如果文件比本地副本更新,则下载该文件。部分脚本已经编写完成。已开发的零件使用header Last Modified参数。我需要有一个替代方案,以防最后修改的参数在标题中不可用。有人知道有没有一种方法可以使用bashshell脚本或python来获取网站上as文件的最后修改日期,而不使用标题中的最后修改的参数 谢谢 James如果您通过http检索数据,则无法保证您所请求的内容与物理文件或任何其他具有“上次修改”日期

我正在尝试编写一个bashshell脚本,该脚本将计算远程网站上文件的修改日期,如果文件比本地副本更新,则下载该文件。部分脚本已经编写完成。已开发的零件使用header Last Modified参数。我需要有一个替代方案,以防最后修改的参数在标题中不可用。有人知道有没有一种方法可以使用bashshell脚本或python来获取网站上as文件的最后修改日期,而不使用标题中的最后修改的参数

谢谢


James

如果您通过http检索数据,则无法保证您所请求的内容与物理文件或任何其他具有“上次修改”日期概念的内容相对应,因此在http协议中,除了上次修改之外,没有其他方法可以知道。如果您没有足够新的本地副本,您可能需要检索该文件,并且您必须确定“足够新”是什么


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

在我看来,您基本上是在维护缓存。HTTP不仅仅有
Last Modified
头以方便缓存,但逻辑并不是那么简单。W3C提供了一个关于如何实现缓存的详细说明,您可能会觉得这很有帮助。

正如其他人在这里提到的,很难在文件上次更新时信任上次修改的头

如果您不介意下载文件的全部内容,可以存储文件的md5散列。如果在随后的调用中不同,则您知道文件的内容已更改

在Bash shell中,您可以执行以下操作:

curl -s www.google.com | md5
使用优秀的python库:


还有其他HTTP头,比如etag,但是如果您决定不信任服务器提供的头,那么您就是运气不好。同意。除非您愿意实际检索文档并进行比较,否则HTTP头就是您所拥有的全部。所以相信他们,如果他们错了,那就是服务器的问题。你在函数名中有一个输入错误-应该是hexdigest(),非常好的建议、解释和示例!
import requests
import hashlib

r = requests.get('http://www.example.com')
hash = hashlib.md5(r.text).hexdigest()