본문 바로가기

Programing/.NET

[C#] HTTP/HTTPS 송수신 (HttpWebRequest/HttpWebResponse)

 
 
WebClient / HttpWebRequest  
웹 클라이언트 프로그래밍에서 간단한 WebClient 보다 세밀한 제어를 원할 경우, HttpWebRequest와 HttpWebResponse 클래스를 사용할 수 있다. 사실 WebClient는 HttpWebRequest와 HttpWebResponse 클래스를 내부적으로 사용하고 있는 Wrapper 클래스이다.
 
 

방법1.  WebClient

         public JsonResultEntity HttpTest1(string str, int  Num)
        {
            JsonResultEntity entity = new JsonResultEntity();
            try
            {
                string URL = "API 호출주소";

                WebClient webClient = new WebClient();
                System.Collections.Specialized.NameValueCollection formData = new System.Collections.Specialized.NameValueCollection();
                formData["파라미터"] = str;
                formData["파라미터"] = Num;

                byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
                string result = Encoding.UTF8.GetString(responseBytes);

                //결과값음 Json형식으로 변환
                entity = JsonConvert.DeserializeObject<JsonResultEntity>(result);

            }
            catch (Exception e)
            {
               //통신 실패시 처리로직
            }
            return entity;
        }
 

 

방법2.  HttpWebRequest 

( x-www-form-urlencoded 방식) 

        public JObject HttpTest2(string str , int Num)
        {
             string strUri = "API 호출주소"

            StringBuilder dataParams = new StringBuilder();
            dataParams.Append("str=" + str);
            dataParams.Append("&int=" + Num);
            // 요청 String -> 요청 Byte 변환
            byte[] byteDataParams = UTF8Encoding.UTF8.GetBytes(dataParams.ToString());

            try
            {
                /////////////////////////////////////////////////////////////////////////////////////
                /* POST */
                // HttpWebRequest 객체 생성, 설정
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUri);
                request.Method = "POST";    // 기본값 "GET"
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = byteDataParams.Length;


                // 요청 Byte -> 요청 Stream 변환
                Stream stDataParams = request.GetRequestStream();
                stDataParams.Write(byteDataParams, 0, byteDataParams.Length);
                stDataParams.Close();

                // 요청, 응답 받기
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // 응답 Stream 읽기
                Stream stReadData = response.GetResponseStream();
                StreamReader srReadData = new StreamReader(stReadData, Encoding.UTF8, true);

                // 응답 Stream -> 응답 String 변환
                string strResult = srReadData.ReadToEnd();
                result = JObject.Parse(strResult);
            }
            catch (Exception e)
            {
                throw e;
            }

            return result;
        }

 

방법3.  HttpWebRequest 

( raw 방식) 

        public APIEntity HttpTest3(string str)
        {
           
            //메서드 작성
            string content = "{\"method\" : \"메소드명\", \"str \" : [\"" + value + "\"]}";

            //Encoding
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(content);

            //요청객체 & 요청옵션
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(rpc_url);
            request.Method = "POST";
            request.PreAuthenticate = true;
            request.Headers.Add("Authorization", "인증값");
            request.Accept = "text/plain";

            //스트림 생성
            Stream postStream = request.GetRequestStream();
            postStream.Write(data, 0, data.Length);
            postStream.Close();

            //응답
            HttpWebResponse httpresponse = (HttpWebResponse)request.GetResponse();

            //응답내용
            Stream resultStream = httpresponse.GetResponseStream();
            StreamReader reader = new StreamReader(resultStream, Encoding.Default);

            //응답내용 읽어 변수에 담기
            APIEntity result = JsonConvert.DeserializeObject<APIEntity>(reader.ReadToEnd());

            return entity;
        }

 

'Programing > .NET' 카테고리의 다른 글

[C#]SFTP 파일 업로드  (0) 2021.11.08
[C#] AES256(AES/CBC/PKCS5Padding) 암/복호화  (0) 2021.03.14
[C#] RestSharp 으로 HTTP/HTTPS 통신  (0) 2020.07.24
[C#] Log파일 생성  (0) 2019.07.30
[C#]EUC-KR UTF8변환  (0) 2018.08.01