2009-02-28 16 views

Odpowiedz

47

Użyj klasy System.Net.WebClient.

System.Console.WriteLine(new System.Net.WebClient().DownloadString(url)); 
+2

Nice !! :-) +1 ode mnie! Od razu do rzeczy! –

+2

Byłoby to jednak synchroniczne. Oznacza to, że wyświetla dane tylko po załadowaniu całej strony. – configurator

+3

Sexy one liner ... sprzedane! +1 –

19

mam ciążę przykład:

WebRequest r = WebRequest.Create("http://www.msn.com"); 
WebResponse resp = r.GetResponse(); 
using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
{ 
    Console.WriteLine(sr.ReadToEnd()); 
} 

Console.ReadKey(); 

Oto kolejna opcja, używając WebClient ten czas i zrobić to asynchronicznie:

static void Main(string[] args) 
{ 
    System.Net.WebClient c = new WebClient(); 
    c.DownloadDataCompleted += 
     new DownloadDataCompletedEventHandler(c_DownloadDataCompleted); 
    c.DownloadDataAsync(new Uri("http://www.msn.com")); 

    Console.ReadKey(); 
} 

static void c_DownloadDataCompleted(object sender, 
            DownloadDataCompletedEventArgs e) 
{ 
    Console.WriteLine(Encoding.ASCII.GetString(e.Result)); 
} 

Druga opcja jest przydatna, jak to nie blokuje wątku interfejsu użytkownika, zapewniając lepsze wrażenia.

+0

Wątek interfejsu użytkownika? Czy to nie jest aplikacja konsolowa? –

+1

Nie sprecyzowałem, że mój przykład został użyty wyłącznie do użytku z aplikacją konsolową. –

+0

Zgadzam się, ale uważam, że dokładny przykład, o którym wspomniałeś, demonstruje coś specjalnie * źle * (tylko w wersji konsolowej): naciśnięcie klawisza przed pobraniem adresu URL powoduje zamknięcie konsoli przed zapisaniem czegokolwiek. Zmiana nazwy metody "Main" lepiej świadczy o twoim zamiarze. –

5
// Save HTML code to a local file. 
WebClient client = new WebClient(); 
client.DownloadFile("http://yoursite.com/page.html", @"C:\htmlFile.html"); 

// Without saving it. 
string htmlCode = client.DownloadString("http://yoursite.com/page.html"); 
Powiązane problemy