使用Java获取页面的上次修改日期

时间:2010-10-30 19:10:47

标签: java date webpage

是否有一种标准的方式来判断页面上次修改的时间?目前我这样做:

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,因为这是我用来下载网页的内容)

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

来自HTTP/1.1: Header Field Definitions

  

14.29 Last-Modified

     

Last-Modified实体标题字段   表示日期和时间   原始服务器相信变体   最后一次修改。

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

其使用的一个例子是

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

此标题字段的确切含义   取决于实施   原始服务器和性质   原始资源。对于文件,它可能   只是最后修改过的文件系统   时间。对于具有动态的实体   包括部分,它可能是最多的   最近的一组最后修改时间   其组成部分。对于数据库   网关,它可能是最后更新   记录的时间戳。对于虚拟   对象,可能是最后一次了   内部状态发生了变化。

     

原始服务器不得发送   最后修改日期晚于   服务器的消息时间   首创。在这种情况下,在哪里   资源的最后修改会   表明未来的某些时间   服务器必须用。替换该日期   消息发起日期。

     

原始服务器应该获得   最后修改的实体值为   尽可能接近它的时间   生成其日期值   响应。这允许收件人   准确评估   实体的修改时间,特别是   如果实体在时间附近发生变化   生成响应。

     

HTTP / 1.1服务器应该发送   在可行的情况下进行最后修改。

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