C#에서 rest api 호출하는 방법을 확인해보겠습니다.

 

WebClient 클래스와, WebRequest 클래스를 활용해 보겠습니다.

 

샘플 API는 고속도로 공공데이터 포털의 API를 활용하겠습니다. 

인증키 없이도 호출할 수 있어 채택했습니다.

 

http://data.ex.co.kr/openapi/basicinfo/openApiInfoM?apiId=0303&serviceType=OPENAPI&keyWord=&searchDayFrom=2014.12.01&searchDayTo=2019.10.21&CATEGORY=&GROUP_TR=

 

고속도로 공공데이터 포털

 

data.ex.co.kr

 

샘플 API 주소 :  http://data.ex.co.kr/openapi/safeDriving/forecast?key=test&type=json   

 

위 샘플 API를 호출하면 아래와 같은 JSON 스트링 결과를 확인 할 수 있습니다.

리턴되는 규격은 아래와 같습니다.

 

 

C# 코드에서 호출해보도록 하겠습니다.

 

WebClient 활용 샘플

:WebClient 클래스를 객체를 생성하고

OpenRead(호출할url) 메소드를 통해 api를 호출해줍니다.

결과 값은 StreamReader 를 통해 string으로 읽어 return해줍니다.

client.Headers.Add() 코드를 통해 원하는 헤더를 설정할 수 도 있습니다.

        public static string callWebClient()
        {
            string result = string.Empty;
            try
            {
                WebClient client = new WebClient();

                //특정 요청 헤더값을 추가해준다. 
                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

                using (Stream data = client.OpenRead(targetURL))
                {
                    using (StreamReader reader = new StreamReader(data))
                    {
                        string s = reader.ReadToEnd();
                        result = s;

                        reader.Close();
                        data.Close();
                    }
                }

            }
            catch (Exception e)
            {
                //통신 실패시 처리로직
                Console.WriteLine(e.ToString());
            }
            return result;
        }

 

WebRequest 활용 샘플

WebReuqest 객체를 생성하고,

request.Method 속성을 통해 GET, POST 호출 방식을 정의합니다.

request.ContentType 속성을 통해 요청데이터가 어떤형식으로 전달될지 정의합니다.

request.Headers[""] = "" 를 통해 커스텀 헤더를 정의합니다.

그리고 StreamReader를 통해 호출결과를 string으로 읽어냅니다.

        public static string callWebRequest()
        {
            string responseFromServer = string.Empty;

            try
            {

                WebRequest request = WebRequest.Create(targetURL);
                request.Method = "GET";
                request.ContentType = "application/json";
                request.Headers["user-agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; 
                using (WebResponse response = request.GetResponse())
                using (Stream dataStream = response.GetResponseStream())
                using (StreamReader reader = new StreamReader(dataStream))
                {
                    responseFromServer = reader.ReadToEnd();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return responseFromServer;
        }

 

아래는 전체 코드입니다.

각 메소드를 통해 리턴받은 string값을 json으로 변환하여 콘솔창에 출력해보았습니다.

 

전체 코드 

using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace vmpoStudy01
{
    class Program
    {

        static string targetURL = "http://data.ex.co.kr/openapi/safeDriving/forecast?key=test&type=json";
        

        static void Main(string[] args)
        {
               
            //1.WebClient 클래스 활용
            string webClientResult = callWebClient();

            var r = JObject.Parse(webClientResult);
            
            var list = r["list"];

            Console.WriteLine(r);
            foreach (var o in list)
            {
                Console.WriteLine(string.Format("{0} : {1}", "날짜"               , o["sdate"]));
                Console.WriteLine(string.Format("{0} : {1}", "전국교통량"         , o["cjunkook"]));
                Console.WriteLine(string.Format("{0} : {1}", "지방교통량"         , o["cjibangDir"]));
                Console.WriteLine(string.Format("{0} : {1}", "서울->대전 소요시간" , o["csudj"]));
                Console.WriteLine(string.Format("{0} : {1}", "서울->대구 소요시간" , o["csudg"]));
                Console.WriteLine(string.Format("{0} : {1}", "서울->울산 소요시간" , o["csuus"]));
            }

            Console.WriteLine("*************************************************************");

            string wbRequestResult = callWebRequest();

            var r2 = JObject.Parse(webClientResult);

            var list2 = r["list"];

            Console.WriteLine(r2);
            foreach (var o in list2)
            {
                Console.WriteLine(string.Format("{0} : {1}", "날짜", o["sdate"]));
                Console.WriteLine(string.Format("{0} : {1}", "전국교통량", o["cjunkook"]));
                Console.WriteLine(string.Format("{0} : {1}", "지방교통량", o["cjibangDir"]));
                Console.WriteLine(string.Format("{0} : {1}", "대전->서울 버스 소요시간", o["cdjsu_bus"]));
                Console.WriteLine(string.Format("{0} : {1}", "대구->서울 버스 소요시간", o["cdgsu_bus"]));
                Console.WriteLine(string.Format("{0} : {1}", "울산->서울 버스 소요시간", o["cussu_bus"]));
            }


        }


        public static string callWebClient()
        {
            string result = string.Empty;
            try
            {
                WebClient client = new WebClient();

                //특정 요청 헤더값을 추가해준다. 
                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

                using (Stream data = client.OpenRead(targetURL))
                {
                    using (StreamReader reader = new StreamReader(data))
                    {
                        string s = reader.ReadToEnd();
                        result = s;

                        reader.Close();
                        data.Close();
                    }
                }

            }
            catch (Exception e)
            {
                //통신 실패시 처리로직
                Console.WriteLine(e.ToString());
            }
            return result;
        }


        public static string callWebRequest()
        {
            string responseFromServer = string.Empty;

            try
            {

                WebRequest request = WebRequest.Create(targetURL);
                request.Method = "GET";
                request.ContentType = "application/json";

                using (WebResponse response = request.GetResponse())
                using (Stream dataStream = response.GetResponseStream())
                using (StreamReader reader = new StreamReader(dataStream))
                {
                    responseFromServer = reader.ReadToEnd();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return responseFromServer;
        }

    }
}

 

각 클래스를 통해 2번 호출한 결과입니다.

정상적으로 출력된 것을 확인할 수 있습니다.

 

 

C# 코드로 API 호출 프로그램을 간단하게 구현할 수 있었습니다.

 

 

LIST
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기