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.
Poznáváme C# a Microsoft. NET 67. díl – přístup k internetu pomocí třídy 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í, Proud, Catch, Filename, 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...
Určitě si přečtěte

Jak vybrat monitor k počítači: nenechte se zlákat nepodstatnými parametry

Jak vybrat monitor k počítači: nenechte se zlákat nepodstatnými parametry

** Na jaké parametry se zaměřit a kde vás výrobci chtějí nachytat ** Monitory se stále více specifikují pro konkrétní určení ** Náročný hráč nebo profesionální grafik mají různé požadavky

20.  6.  2017 | Tomáš Holčík | 32

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

** Sledujte počasí z více zdrojů a podrobněji, přesněji tak určíte, jaké počasí vás potká na dovolené ** Na webu najdete hromadu pokročilých předpovědí počasí, ale i specializované meteorologické služby ** Vybrali jsme 14 služeb na počasí, které se vám můžou hodit

23.  6.  2017 | Jakub Čížek | 19

Jak unikají informace o nových iPhonech? Třeba podprsenkami čínských pracovnic

Jak unikají informace o nových iPhonech? Třeba podprsenkami čínských pracovnic

** Na černém trhu mohou zaměstnanci továren za kradené součástky inkasovat částku ve výši ročního platu ** Velké množství informací je vyneseno i z centrály Applu ** Díly jsou pašovány v botách, podprsenkách i odpadem

21.  6.  2017 | Stanislav Janů | 24


Aktuální číslo časopisu Computer

Bojujeme proti Fake News

Dva velké testy: fotoaparáty a NASy

Co musíte vědět o změně evropského roamingu

Radíme s výběrem základní desky