2011-04-30 18 views
1

私はデスクトップにPDFをダウンロードしようとしています - 新しいコンテンツで数日おきにPDFが更新され、PDFを自動的に更新する方法があるかどうかを確認しようとしていました実際のリンクに行かなくても新鮮なコンテンツを持っているときは、その自己です。WebサイトからPDFコンテンツをダウンロードする -

からhttp://www.uakron.edu/dotAsset/1265971.pdf

+1

だから、あなたの質問は何ですか? – Oded

+2

Erm、「実際のリンクに行きたくない」場合は、* anything *を見つけることができません。 –

+0

Uhm、PDFをダウンロードして、リンクに行かなくても自動的にすべてのアップデートを自動的に取得するスクリプトを作成しようとしています。 –

答えて

2

これはでもリモートでプログラミングの質問であると仮定すると、あなたは(理想的にはあなたの要求であれば、修正-Sinceヘッダを送信する)のHTTP HEADクエリを試してみてください、とレスポンスヘッダを検査することができ - サーバーがフレンドリーであれば、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

ありがとうMarc!それは有り難いです。このようなことをしようとするリンクを私に提供できますか?私はこれをどのようにコーディングするのか分かりません。 –

+0

@Blake - 私はそのURLをテストしましたが、これはほとんど(これはかなり標準的なもの)をサポートしていないようです。しかし、 'WebClient'や' HtpWebRequest'のようなものはあなたの友人です。 –

+0

@Blake - アップデートを参照 –

関連する問題