Wur*_*bro 5 vb.net url last-modified
我想知道远程文件的最后修改日期(通过url定义).
并且只下载它,如果它比我本地存储的更新.
我设法为本地文件执行此操作,但找不到为远程文件执行此操作的解决方案(不下载它们)
工作:
Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo("C:/test.txt")
MsgBox("File was last modified on " & infoReader.LastWriteTime)
Run Code Online (Sandbox Code Playgroud)
不工作:
Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo("http://google.com/robots.txt")
MsgBox("File was last modified on " & infoReader.LastWriteTime)
Run Code Online (Sandbox Code Playgroud)
我希望有一个只需要下载文件头的解决方案
您可以使用该类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
Run Code Online (Sandbox Code Playgroud)
您还可以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
Run Code Online (Sandbox Code Playgroud)
请注意 的使用.Result,因为我正在控制台应用程序中进行测试 - 您可能应该await改为。
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |