加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

自从我上次显示Delphi TWebBrowser网页后,检测Delphi TWebBrowse

发布时间:2020-12-15 09:19:09 所属栏目:大数据 来源:网络整理
导读:我想使用Deplhi TWebBrowser在表单中显示“新闻”页面.新闻页面是一个简单的 HTML页面,我们不时上传到我们的网站,可能会从各种工具输出.显示很好但我想在我的应用程序中知道自从我上次显示它以来它是否已经改变,所以理想情况下我想要获得其修改日期/时间或其
我想使用Deplhi TWebBrowser在表单中显示“新闻”页面.新闻页面是一个简单的 HTML页面,我们不时上传到我们的网站,可能会从各种工具输出.显示很好但我想在我的应用程序中知道自从我上次显示它以来它是否已经改变,所以理想情况下我想要获得其修改日期/时间或其大小/校验和.精度并不重要,理想情况下不应该依赖可能失败的属性,因为“简单”工具用于编辑HTML文件,如NotePad.检查网上有几个文件修改过的 java调用,但我真的不知道从哪里开始.我查看了Delphi的Winapi.WinInet单元中的大量调用,我看到我可以使用HTTP获取文件来检查它,但这似乎是用大锤敲碎核桃.我也看不到任何文件日期时间功能,这让我觉得我错过了一些明显的东西.我正在使用Delphi XE5.我应该朝哪个方向看?谢谢你的任何指示.

解决方法

您可以使用Indy TIdHTTP发送HEAD请求并检查Last-Modified / Content-Length标头.

例如.:

procedure TForm1.Button1Click(Sender: TObject);
var
  Url: string;
  Http: TIdHTTP;
  LastModified: TDateTime;
  ContentLength: Integer;  
begin
  Url := 'http://yoursite.com/newspage.html';
  Http := TIdHTTP.Create(nil);
  try
    Http.Head(Url);
    LastModified := Http.Response.LastModified;
    ContentLength := Http.Response.ContentLength;
    ShowMessage(Format('Last-Modified: %s ; Content-Length: %d',[DateTimeToStr(LastModified),ContentLength]));
  finally
    Http.Free;
  end;
end;

触发TWebBrowser.DocumentComplete事件时,发出HEAD请求并存储LastModified和ContentLength变量.
然后定期发出HEAD请求以测试更改(例如通过TTimer).

这些Header参数取决于Web服务器实现,并且可能不会在服务器上返回文件系统日期时间(例如,动态页面).您的服务器可能根本不会返回这些参数.

例如,对于IIS上的静态HTML页面,Last-Modified将返回文件系统上次修改日期时间,这是您想要的.

对于动态内容(例如php,asp,.NET等),如果你控制web服务器,你也可以在服务器端添加你自己的自定义HTTP响应头来指示文件系统的日期时间(例如X -Last-Modified)或根据需要设置响应Last-Modified标头,并在客户端检查此标头.

如果需要检查/散列整个HTTP内容,则需要发出GET方法:http.Get(URL)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读