我想知道远程文件的最后修改日期(通过url定义).
并且只下载它,如果它比我本地存储的更新.
并且只下载它,如果它比我本地存储的更新.
我设法为本地文件执行此操作,但找不到为远程文件执行此操作的解决方案(不下载它们)
工作:
Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo("C:/test.txt") MsgBox("File was last modified on " & infoReader.LastWriteTime)
不工作:
Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo("http://google.com/robots.txt") MsgBox("File was last modified on " & infoReader.LastWriteTime)
我希望有一个只需要下载文件头的解决方案
解决方法
您可以使用
System.Net.Http.HttpClient
类从服务器获取上次修改日期.因为它正在发送HEAD请求,所以它不会获取文件内容:
Dim client = New HttpClient() Dim msg = New HttpRequestMessage(HttpMethod.Head,"http://google.com/robots.txt") Dim resp = client.SendAsync(msg).Result Dim lastMod = resp.Content.Headers.LastModified
您还可以将If-Modified-Since请求标头与GET请求一起使用.这样,如果文件没有被更改(没有发送文件内容),响应应该是304 – Not Modified,如果文件已被更改,则响应应该是200 – OK(并且文件的内容将在响应中发送),尽管服务器不需要遵守此标头.
Dim client = New HttpClient() Dim msg = New HttpRequestMessage(HttpMethod.Get,"http://google.com/robots.txt") msg.Headers.IfModifiedSince = DateTimeOffset.UtcNow.AddDays(-1) ' use the date of your copy of the file Dim resp = client.SendAsync(msg).Result Select Case resp.StatusCode Case HttpStatusCode.NotModified ' Your copy is up-to-date Case HttpStatusCode.OK ' Your copy is out of date,so save it File.WriteAllBytes("C:\robots.txt",resp.Content.ReadAsByteArrayAsync.Result) End Select
注意使用.Result,因为我在控制台应用程序中进行测试 – 你应该等待.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。