reklama

Poznáváme C# a Microsoft. NET 67. díl – přístup k internetu pomocí třídy WebClient

Dnešní díl je úvodním dílem do problematiky implementace aplikací pro platformu .NET, které pracují v počítačové síti. Jako první se seznámíme s velmi přátelskou třídou WebClient.

Síťové aplikace a platforma .NET

V případě, že se při tvorbě svého projektu na platformě MS .NET dostanete do situace, ve které budete potřebovat pomocí síťových protokolů komunikovat s webovými servery nebo obecněji s jakýmikoli jinými počítači, které jsou připojeny do sítě nemusíte se bát neúspěchu.

V základní knihovně tříd .NET frameworku totiž nalezneme nemalý počet typů, které nám na různých úrovních abstrakce zprostředkovávají využití komunikace pomocí některého ze síťových protokolů. Většinu z těchto typů nalezneme ve jmenném prostoru System.Net případně System.Net.Sockets.

Takže pokud nám jde pouze o stažení dat z nějakého vzdáleného počítače, použijeme třídu poskytující vysokou úroveň abstrakce a nemusíme se prakticky starat o mnohé z detailů, které jsou typicky při implementaci síťových aplikací zapotřebí.

Ovšem pokud chceme pracovat na nižší úrovni, tedy přímo využívat vlastnosti a služeb jednotlivých síťových protokolů jako jsou HTTP, TCP či UDP, máme možnost využít typy, které nám takovýto specifický přístup umožňují. Architektura subsystému pro práci se síťovými prostředky mimo jiné umožňuje implementaci ovladačů pro vlastní protokoly, která je velmi jednoduchá (implementace předepsaných rozhraní).

Třída WebClient

Myslím, že není příjemnějšího úvodu do světa práce se síťovými prostředky než třída WebClient ze jmenného prostoru System.Net . Tato třída poskytuje velmi vysokou úroveň abstrakce pro stahování dat z webových serverů nebo naopak pro jejich posílání (Upload), takže se nemusíme zaobírat detaily, které souvisejí s vlastní komunikací.

Cesta k jednotlivým síťovým zdrojům, se kterými má instance třídy WebClient pracovat je zadávána pomocí URI (Uniform Resource Identifier). .NET framework ve verzi 1.1 umožňuje v URI použit identifikátory http: , https: a file:.

Stahování dat pomocí třídy WebClient

Pokud chceme stahovat dat z webového serveru pomocí třídy WebClient máme na výběr ze dvou možností realizace. První možností je prosté uložení staženého souboru na disk, což provedeme pomocí metody DownloadFile.

WebClient client = new WebClient();
Console.Write("Zadejte URI (napr.
) : ");
//nacteme URI
string uri = Console.ReadLine();
Console.Write("Zadejte nazev stazeneho souboru (napr. C:/new.txt) :");
//nacteme kam se ma soubor ulozit
string fileName = Console.ReadLine();
try
{
  //stahneme soubor
  client.DownloadFile(uri, fileName);
  Console.WriteLine("Soubor byl uspesne stazen.");
}
catch(WebException ex)
{
  Console.WriteLine("Pri stahovani souboru doslo k vyjimce : {0}", ex.ToString());
}

Jak vidíte, tak použití třídy WebClient je jednoduché. Ke stažení souboru zadáme metodě DownloadFile dva argumenty, kde prvním je URI souboru, který má být stažen a druhým je cesta kam mám být soubor uložen.

Pokud získat data souboru, jež je specifikován URI, ve formě bajtů, použijeme za tímto účelem metodu DownloadData. Následující příklad je napsán tak, že očekává data představující text.

WebClient client = new WebClient();
//nacteme URI zdroje
Console.Write("Zadejte URI (napr.
) : ");
string uri = Console.ReadLine();
try
{
  Console.WriteLine("Stahuji {0} ...", uri);
  //stahneme data jako pole bajtu
  byte[] data = client.DownloadData(uri);
  Console.WriteLine("Velikost nactenych dat : {0} bajtu", data.Length);
  //prevedeme pole bajtu na text
  string textContent = Encoding.ASCII.GetString(data);
  Console.WriteLine(textContent);
}
catch(WebException ex)
{
  Console.WriteLine("Pri stahovani souboru doslo k vyjimce : {0}", ex.ToString());
}

Metoda DownloadData vrací data, která jsou reprezentována polem bajtů. Pokud je stahovaný soubor textového obsahu, musíme tyto bajty dekódovat, což je v příkladu učiněno pomocí podpory pro znakové kódování – třídou Encoding.

Získáni datového proudu ke vzdálenému souboru

Jiným způsobem, kterým lze získat obsah vzdáleného souboru je získání jeho datového proudu. Tento datový proud získáme opět pomocí instance třídy WebClient a jeho metody OpenRead, která vrací referenci typu Stream ze jmenného prostoru System.IO. Pokud by vzdálený soubor byl textový mohl by jednoduchý webový klient vypadat třeba následovně:

WebClient client = new WebClient();
//nacteme URI
Console.Write("Zadejte URI (napr.
) : ");
string uri = Console.ReadLine();
Stream strm = null;
try
{
  Console.WriteLine("Pristupuji k {0} ...", uri);
  //otevevreme proud k cilovemu souboru
  strm = client.OpenRead(uri);
  StreamReader reader = new StreamReader(strm);
  //nacteme obsah souboru
string content = reader.ReadToEnd();
  Console.WriteLine(content);
}
catch(WebException ex)
{
  Console.WriteLine("Pri stahovani souboru doslo k vyjimce : {0}", ex.ToString());
}
finally
{
  if (strm != null)
  {
    strm.Close();
  }
}

Díky tomu, že jsme s datovým proudem asociovali instanci známé třídy StreamReader mohli jsme celý obsah souboru načíst pomocí metody ReadToEnd.

Pomocí metody OpenRead lze získat datový proud, ze kterého jsme schopni data číst. Pokud bychom chtěli získat datový proud, který bychom mohli využít k zápisu, použijeme analogicky metodu OpenWrite.

//nacteme URI
Console.Write("Zadejte URI (napr.
file://C:/file.txt) : ");
string uri = Console.ReadLine();
Console.Write("Zadejte text, ktery ma byt zapsan : ");
string text = Console.ReadLine();
WebClient client = new WebClient();
StreamWriter writer = null;
try
{
  //otevreme proud pro zapis
  Stream strm = client.OpenWrite(uri);
  //pomoci instance tridy StreamWriter zapiseme text
  writer = new StreamWriter(strm);
  writer.WriteLine(text);
  Console.WriteLine("Text byl uspesne zapsan do {0}", uri);
}
catch(WebException ex)
{
  Console.WriteLine(ex.ToString());
}
finally
{
  if (writer != null)
  {
    writer.Close();
  }
}

Příklady ke článku jsou ke stažení zde.

Příště se podíváme na implementaci síťových aplikací využívající architekturu požadavek/odpověď.

Témata článku: Software, Microsoft, Programování, Catch, Proud, MA

1 komentář

Nejnovější komentáře

  • gully, gully 27. 6. 2006 23:55:57
    Off-line verzi seriálu si můžete stáhnout z...
reklama
Určitě si přečtěte

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

** Microsoft pomalu začíná kritizovat svůj nejpopulárnější OS ** Chce konečně dostat podniky na Desítky ** Bezpečnostní podpora Sedmiček vydrží ještě necelé tři roky

17.  1.  2017 | Jakub Čížek | 384

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

** Dva týdny po Novém roce zajím zeje prázdnotou ** Ministerstvo vydalo metodický pokyn ** Takhle to bude fungovat v praxi

16.  1.  2017 | Jakub Čížek | 49

Opera Neon: Takto prý bude vypadat prohlížeč budoucnosti. Chcete to?

Opera Neon: Takto prý bude vypadat prohlížeč budoucnosti. Chcete to?

** Opera představila Neon ** Koncepci prohlížeče budoucnosti ** Připomíná Chrome OS

16.  1.  2017 | Jakub Čížek | 35


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama