2011-04-30 165 views
1

我正試圖將PDF下載到我的桌​​面 - 有關每隔幾天使用新內容的PDF更新,我試圖查看是否有方法讓PDF自動更新它具有新鮮的內容,而不必去實際的鏈接。從網站下載PDF內容 -

- http://www.uakron.edu/dotAsset/1265971.pdf

+1

那麼,什麼是你的問題? – Oded 2011-04-30 19:58:38

+2

呃,如果你不想'去實際的鏈接',你不能找出*任何東西*。 – 2011-04-30 19:59:45

+0

嗯,我正在嘗試下載PDF並創建一個腳本,它將自動獲取所有更新,而無需轉到鏈接。 – 2011-04-30 20:05:19

回答

2

假設這是甚至遠程一個編程問題,你可以嘗試一個HTTP HEAD查詢(理想情況下發送的If-Modified-Since頭在你的要求),並檢查響應頭 - 如果服務器友好,它會告訴你它是否沒有通過304響應代碼更新。

如果你沒有得到304,那麼發出GET請求並保存響應流。

你也可以試着用最後修改(跳過HEAD)發出一個GET;但HEAD請求可能如果服務器是不是隻是一個GET完全滿意/節省帶寬304

沒有廣泛的測試,但:

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"); 
     } 
    } 
} 
+0

謝謝馬克!我很感激。你能給我提供一個嘗試做這樣的事情嗎?我不知道如何去編碼。 – 2011-04-30 20:09:28

+0

@Blake - 我測試過這個URL,它似乎不支持這個(很標準的東西)。然而,像WebClient或HtpWebRequest這樣的東西在這裏是你的朋友。 – 2011-04-30 20:18:35

+0

@布萊克 - 見更新 – 2011-04-30 20:35:01