Notice»

Recent Post»

Recent Comment»

Recent Trackback»

Archive»

« 2024/4 »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

2. HttpClient

 

웹서비스와 통신을 위해서는System.Net.Http네임스페이스의 HttpClient를 사용하면 된다. 일반 웹페이지나 Restful 같은 웹서비스에도 사용되며 공공 API나 소셜 기능을 연동할 때 사용할 수 있다. 이번에는 예제를 통해 뉴스 사이트의 RSS(XML)을 가져오는 방법을 알아보도록 한다.

 

[예제 4] HttpClient

HttpClient httpClient;

 

 protected override void OnNavigatedTo(NavigationEventArgs e)

 {

     txtURL.Text = "http://www.yonhapnews.co.kr/RSS/sokbo.xml";

 

     httpClient = new HttpClient();

 }

 

 protected override void OnNavigatedFrom(NavigationEventArgs e)

 {

     if (httpClient != null)

     {

         httpClient.Dispose();

         httpClient = null;

     }

 }

 

 private async void BtnStart_Click(object sender, RoutedEventArgs e)

 {

     txtOutput.Text = string.Empty;

 

     Uri resourceUri;

     if (!Uri.TryCreate(txtURL.Text.Trim(), UriKind.Absolute, out resourceUri))

     {

         txtOutput.Text = "잘못된 URI입니다.";

         return;

     }

    

     try

     {

         HttpResponseMessage response = await httpClient.GetAsync(resourceUri);

 

         // 결과 출력

         txtOutput.Text = ((int)response.StatusCode) + " " + response.ReasonPhrase + ronment.NewLine;

         string responseBodyAsText = await response.Content.ReadAsStringAsync();

         responseBodyAsText = responseBodyAsText.Replace("<br>", Environment.NewLine);

         txtOutput.Text += responseBodyAsText;

     }

     catch (HttpRequestException hre)

     {

         txtOutput.Text = hre.ToString();

     }

     catch (Exception ex)

     {

         txtOutput.Text = ex.ToString();

     }

 }

 

 

 

<그림3> HttpClient 결과

 

몇가지 간단한 에러처리와 결과물 출력시 보기 좋게 하는 코드가 포함되어 있으며 실제 코드는 간단한 편이다. HttpClient클래스를 생성하고GetAsync를 호출하여 반환된 HttpResponseMessage로 결과를 화면에 출력하였다.

HttpClient 클래스는 HTTP를 통해 기본 요청을 보내고 받는데 사용된다. HTTP 요청을 보내고 URI로 식별된 리소스에서 HTTP 응답을 받기 위해 기본 제공되는 클래스를 이용하여 GET,PUT,POST,DELETE 및 기타 요청을 웹 서비스로 보낼 수 있다. HttpClient클래스를 이용하면 https로 시작하는 암호화 사이트도 처리할 수 있으며 오버플로우를 막기 위한 버퍼의 사이즈 제한 또한 손쉽게 처리 할 수 있다.

HttpResponseMessage 클래스는 HTTP 요청에서 받은 HTTP 응답 메시지를 나타낸다. HttpContent 클래스는 HTTP 엔티티 본문과 콘텐츠 헤더를 나타내는 기본 클래스이다.

Async 네이밍과 await 키워드는 앞서 비동기에서 설명하였으며 네트워크는 그 특성상 완료되는 시점을 알 수 없으므로 대부분이 비동기로 처리되어 있을 것이다.

 

: