Die Zwei-Zeilen-Lösung: Datei aus dem Internet lokal speichern

Veröffentlicht: 19. Mrz 2002 | Aktualisiert: 08. Nov 2004
Von Tilman Börner

Mit Hilfe der Base Class Library (BCL) von .NET bedarf es genau zweier Zeilen Code, um eine Datei von einem Web-Server herunter zu laden und lokal zu speichern. Code in C#.

* * *

Jeder Browser tut es: Er lädt Dateien von einem Web-Server auf die lokale Festplatte herunter. Das gilt für HTML-Files genauso wie für Bilder oder Sounds.

Eine solche Kopierfunktion lässt sich im eigenen Programm noch zu ganz anderem einsetzen. Beispielsweise nutzen so genannte Grabber oder Whacker sie, um ganze Internet-Sites auf die lokale Festplatte zu kopieren.

Oder denken Sie an die maschinelle Verarbeitung von Seiten, etwa der Extraktion von bestimmten Daten, die dann in eine Datenbank fließen wie Aktienticker oder News.

Die BCL des .NET Framework stellt mit der Klasse WebClient Methoden zum Datenaustausch über das Internet zur Verfügung. Beispielsweise erlaubt die Klasse, Daten in Form von Byte-Arrays an eine Adresse im Internet zu schicken, die über einen URI angegeben wird.

Genauso versteht sie sich aber auch darauf, über die Methode DownloadFile eine Datei zu laden, deren Adresse über einen URI angegeben ist.

Der Clou dabei ist: Die zentrale Kopierfunktion ist damit mit nur zwei Zeilen Code implementiert.

WebClient myClient = new WebClient(); 
myClient.DownloadFile(adress, FileName); 

Die erste Zeile instanziert das Objekt WebClient der BCL. Die zweite Zeile ruft die Methode DownloadFile auf. Als ersten Parameter erwartet DownloadFile den URI, als zweiten den Namen der lokalen Datei, in die das File gespeichert werden soll.

Bei den Dateien ist es dabei egal, ob es sich um binäre Daten wie Bilder oder Sounds oder Text wie HTML-Dateien handelt.

Der folgende Code umkleidet die beiden zentralen Zeilen, damit das Programm über die Kommandozeile aufgerufen werden kann.

using System; 
using System.Net; 
public class HttpTwoLines 
{ 
  public string GetFile(string adress, string FileName) 
  { 
    try 
    { 
      WebClient myClient = new WebClient(); 
      myClient.DownloadFile(adress, FileName); 
      return "Done"; 
    } 
    catch (Exception e) 
    { 
      Console.WriteLine(e.Message); 
      return ""; 
    } 
  } 
  static void Main(string[] args) 
  { 
    HttpTwoLines h = new HttpTwoLines(); 
    Console.WriteLine("Speichere die HTML-Seite {0} in die Datei {1}", args[0], args[1]); 
    Console.WriteLine("\n{0}", h.GetFile(args[0], args[1])); 
  }  
} 

Speichern Sie den Code in der Datei HttpTwoLines.cs und kompilieren sie anschließend, sollte – bei bestehender Internet-Verbindung – der Aufruf von

HttpTwoLines /germany/msdn msdn.htm 

zum Erfolg führen und das Programm "Done" ausspucken. Kann WebClient keine Verbindung mit dem Internet herstellen oder den URI nicht auflösen, gibt das Programm den Text der Exception aus.

Wollen Sie die Standardseite eines Web-Servers wie index.html oder default.asp herunterladen, müssen Sie den Dateinamen nicht angeben. Der Web-Server gibt automatisch diese Datei zurück, wenn der URI keinen Dateinamen enthält.

Wichtig hingegen ist die Angabe des Protokolls: Ohne "http://" werden Sie keinen Erfolg haben.


Anzeigen: