2010-10-30 80 views
2

有没有一种标准方式来判断页面上次修改时间?目前,我这样做:使用Java获取页面的最后修改日期

URLConnection uCon = url.openConnection(); 
uCon.setConnectTimeout(5000); // 5 seconds 
String lastMod = uCon.getHeaderField("Last-Modified"); 
System.out.println("last mod: "+lastMod); 

但是它看起来像一些网站没有Last-Modified场。

http://www.cbc.ca具有这些字段:

X-Origin-Server 
Connection 
Expires 
null 
Date 
Server 
Content-Type 
Transfer-Encoding 
Cache-Control 

我可以分析一个网页,试图得到它的日期,但是这似乎是一个重大的痛苦。标准是什么?

(如果可能的话,我想坚持使用URLConnection的,因为这是我用来下载网页)

回答

5

没有标准。动态生成的网页通常没有Last-Modified字段,不同的网页以不同的方式包含日期。有些网站甚至不包括这样的日期,包括底部的“<当前年份>”。您可以尝试寻找靠近底部或顶部的日期,但可靠从网页中提取日期必须是特定于站点的。

+0

呵呵,那也是我的想法。谢谢! – sixtyfootersdude 2010-10-30 19:33:32

3

HTTP/1.1: Header Field Definitions

14.29的Last-Modified

最后修改实体头域 表示其 原始服务器认为变种 最后一次修改的日期和时间。

Last-Modified = "Last-Modified" ":" HTTP-date 

其使用的一个例子是

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT 

这个头 的确切含义取决于 原始服务器的实现和 原始资源的性质。对于文件,它可能是 只是文件系统上一次修改的 时间。对于包含动态内容的实体,它可能是最近修改时间集合 中最近的一个组件。对于数据库 网关,它可能是记录的最后更新 时间戳记。对于虚拟的 对象,它可能是内部状态最后一次更改。

原始服务器不得发送 最后修改日期晚于 服务器的消息时间 发起。在这种情况下,如果 资源的最后修改 指示将来有一段时间,则 服务器必须将该日期替换为 消息始发日期。

原始服务器应取得实体的 上次修改值作为 尽可能地接近它 产生其 响应的日期值的时间。这允许收件人 准确评估实体的修改时间,尤其是 ,如果实体在时间 附近改变了生成响应。

HTTP/1.1服务器应该发送 只要可行,最后修改。

从这一点Last-modified是可选的,它的值取决于原始资源的性质。

+0

谢谢,非常有帮助! – sixtyfootersdude 2010-10-31 01:41:47