2013-03-03 15 views
5

używam WebClient aby pobrać dane yahoo na Windows Phone 8 i Android HttpClient Z WebClient mogę zrobićAlternatywa WebClient dla Windows 8?

WebClient client = new WebClient(); 
    client.DownloadStringCompleted += new  DownloadStringCompletedEventHandler(client_DownloadStringCompleted); 
    client.DownloadStringAsync(url); 

po wysłaniu zdarzenia;

StringReader stream = new StringReader(e.Result) 

    XmlReader reader = XmlReader.Create(stream); 
    reader.ReadToFollowing("yweather:atmosphere"); 
    string humidty = reader.MoveToAttribute("humidity"); 

ale w Windows 8 RT nie ma czegoś takiego.

Jak mogę pobrać następujące dane? >http://weather.yahooapis.com/forecastrss?w=2343732&u=c

+0

Czy obejrzałeś 'HttpClient'? –

Odpowiedz

8

Można użyć HttpClient klasa, coś takiego:

public async static Task<string> GetHttpResponse(string url) 
{ 
    var request = new HttpRequestMessage(HttpMethod.Get, url); 
    request.Headers.Add("UserAgent", "Windows 8 app client"); 

    var client = new HttpClient(); 
    var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); 

    if (response.IsSuccessStatusCode) 
     return await response.Content.ReadAsStringAsync(); 
    else 
    throw new Exception("Error connecting to " + url +" ! Status: " + response.StatusCode); 
} 

Prostsza wersja byłaby tylko:

public async static Task<string> GetHttpResponse(string url) 
{ 
    var client = new HttpClient(); 
    return await client.GetStringAsync(url); 
} 

Ale jeśli występuje http error GetStringAsync rzuci HttpResponseException, i jak dalece widać, że nie ma wskazanego statusu http oprócz komunikatu wyjątku.

UPDATE: nie zauważył, że w rzeczywistości są próby odczytu RSS, nie trzeba HttpClient i XML parser, wystarczy użyć klasy SyndicationFeed, oto przykład:

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452994.aspx

+0

Lub użyj 'await client.GetStringASync' ... nie ma potrzeby sprawdzania samego kodu statusu. –

+0

Zakładam, że GetStringASync wyrzuci wyjątek, jeśli się nie powiedzie (wyjątek WebException)? Nie ma nic w dokumentach MSDN o tym –

+0

Cóż, zadanie zwracane przez GetStringAsync spowoduje błąd. Zgadzam się, że powinno to być lepiej udokumentowane. –

Powiązane problemy