代码之家  ›  专栏  ›  技术社区  ›  friol

构建显示最近更新的网站的C#应用程序

  •  2
  • friol  · 技术社区  · 16 年前

    我想构建一个C#应用程序,它将:

    1. 浏览我的收藏夹列表(例如,在IE中)
    2. 检查自上次访问以来网站是否已更新

    第2点似乎有问题,因为C#的HttpWebResponse.LastModified属性不适用于某些博客和其他网站(它报告当前日期和时间)。

    谢谢

    2 回复  |  直到 16 年前
        1
  •  5
  •   Vinko Vrsalovic    16 年前

    上一次修改的头文件确实不是由一些web服务器设置的,对此您无能为力。对于这些情况,您需要获取HTML并对数据进行散列。如果哈希在下一次检索时匹配,则它(很可能)没有更改。

    如果HTML中有一个不断变化的部分,你可以解析HTML树并删除其中典型的变化部分,比如谷歌广告。但这比仅仅检查标题要费劲得多,这取决于你的实际用例,看它是否值得你费劲。在这最后一项工作中使用的一个好工具是 HTML Agility Pack

    另一种方法是 若要获得更好的结果,请测量 distance 在页面的两个版本之间,并将其标记为高于某个阈值的更新版本。同样,这在许多情况下都会失败(现在会出现误报)。把这个扔到这里,以防万一它会激发你做一些有用的事情。

        2
  •  1
  •   Cory Charlton    16 年前

    Last-Modified 会像你期望的那样工作。从RFC:

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

    我对规范的解释将引导我设置 动态生成内容(即:PHP页面)的当前日期/时间的标题。托管页面的服务器实际上不知道正在构建的内容实际上是在什么时候最后更新的(一些数据来自一个数据库服务器,另一个数据库服务器,两个记录都没有指示更新时间的字段,等等)。它可以将文件系统时间用于PHP文件本身,但在每次重新加载时呈现的内容都会发生更改的情况下,这可能会持续几个月。如果没有开发人员关于使用哪个值的指导,我认为服务器/解释器无法解决这个问题。