我正在尝试将PDF下载到我的桌面 - 每隔几天PDF会更新新内容,我试图看看是否有办法让PDF在有新内容时自动更新自己的内容无需转到实际链接。
答案 0 :(得分:2)
假设这是甚至远程编程问题,您可以尝试HTTP HEAD查询(理想情况下在请求中发送If-Modified-Since标头),并检查响应标头 - 如果是服务器很友好,它会告诉你它是否没有通过304响应代码更新。
如果您没有获得304,则发出GET请求并保存响应流。
您也可以尝试发布最后修改的GET(跳过HEAD);但是如果服务器对GET / 304不满意,HEAD请求可能会节省一些带宽。
未经广泛测试,但是:
using System;
using System.IO;
using System.Net;
static class Program
{
static void Main()
{
string url = "http://www.uakron.edu/dotAsset/1265971.pdf", localPath = "1265971.pdf";
var req = (HttpWebRequest)WebRequest.Create(url);
req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
req.Headers.Add("Accept-Encoding","gzip,deflate");
if(File.Exists(localPath))
req.IfModifiedSince = File.GetLastWriteTimeUtc(localPath);
try
{
using (var resp = req.GetResponse())
{
int len;
checked
{
len = (int)resp.ContentLength;
}
using (var file = File.Create(localPath))
using (var data = resp.GetResponseStream())
{
byte[] buffer = new byte[4 * 1024];
int bytesRead;
while (len > 0 && (bytesRead = data.Read(buffer, 0, Math.Min(len, buffer.Length))) > 0)
{
len -= bytesRead;
file.Write(buffer, 0, bytesRead);
}
}
}
Console.WriteLine("New version downloaded");
}
catch (WebException ex)
{
if (ex.Response == null || ex.Status != WebExceptionStatus.ProtocolError)
throw;
Console.WriteLine("Not updated");
}
}
}