Manchmal möchte man die HTML Seite einer Website oder Dokument wie Bilder, PDF oder ZIP Dateien downloaden. Dies kann man in C# ganz einfach mit den Klassen HttpWebRequest und HttpWebResponse realisieren. Konnte vom Server 10 mal hintereinander keine Daten gelesen werden, wird das herunterladen abgebrochen. Hier könnte man auch eine zeitliche Steuerung realisieren.

using System.IO;
using System.Net;

namespace koesteronline.eu.IO
{
  public class HttpFileDownload
  {
    public static void Download(string url, string destinationFile)
    {
      HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
      HttpWebResponse webRespone = (HttpWebResponse)webRequest.GetResponse();

      using (Stream sr = webRespone.GetResponseStream())
      using (FileStream sw = new FileStream(destinationFile, FileMode.Create, FileAccess.Write))
      {
        int read = 0;
        int written = 0;
        int failCount = 0;
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];

        do
        {
          read = sr.Read(buffer, 0, bufferSize);
          if (read > 0)
          {
            sw.Write(buffer, 0, read);
            written += read;
          }
          else
            failCount++;

        } while (written < webRespone.ContentLength && failCount < 10);
      }
    }
  }
}