从网站下载PDF内容-
本文关键字:内容 PDF 下载 网站 | 更新日期: 2023-09-27 17:53:52
我正在尝试下载一个PDF到我的桌面- PDF更新大约每隔几天有新的内容,我试图看看是否有一种方法,让PDF自动更新自己,当它有新的内容,而不必去实际的链接。
——http://www.uakron.edu/dotAsset/1265971.pdf
假设这是甚至远程编程问题,您可以尝试HTTP HEAD查询(理想情况下在请求中发送if - modified - since标头),并检查响应标头-如果服务器是友好的,它会告诉您它是否没有通过304响应代码更新。
如果你没有得到一个304,那么发出一个get请求并保存响应流。
你也可以尝试使用last-modified(跳过HEAD)发出GET;但是如果服务器不完全满意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");
}
}
}