C#, ASP.NET에서 외부 API 호출 시 사용되는 HTTPWebRequest 호출 함수를 만들어보았다.

Request, Response의 Header 정보까지 확인할 수 있다.

public static int HTTPWebRequest(string strRequestURL, string strRequestData, string strMethod, string strContentType, Dictionary<string, string> objReqHeaderInfo

                                        ,string strMethodName, out string strResponseData, out Dictionary<string, string> objResHeaderInfo, out string strErrMsg)

        {

            int pl_intRetVal = 0;


            HttpWebRequest pl_objWebRequest = null;     //HttpWebRequest Request 오브젝트

            Stream pl_objReqDataStream = null;          //전송할 Post Data를 쓰기 위한 스트림

            HttpWebResponse pl_objWebResponse = null;   //HttpWebRequest Response 오브젝트

            Stream pl_objRepDataStream = null;          //리턴받은 Data를 읽기위한 스트림

            StreamReader pl_objRepStreamReader = null;  //respPostStream를 읽기 위한 스트림 리더


            strResponseData   = "";

            strErrMsg         = "";

            objResHeaderInfo = null;


            try

            {

                // Step1. Request Data Log

                Common.WriteLog("API", strMethodName + "_Request URL",         strRequestURL);

                Common.WriteLog("API", strMethodName + "_Request Method",      strMethod);

                Common.WriteLog("API", strMethodName + "_Request ContentType", strContentType);


                objResHeaderInfo = new Dictionary<string, string>();


                // Step2. HttpWebRequest Object Create

                pl_objWebRequest = (HttpWebRequest)WebRequest.Create(strRequestURL);


                // Step2-1. HttpWebRequest Object Setting

                pl_objWebRequest.Method      = strMethod;

                pl_objWebRequest.ContentType = strContentType;


                // Step2-2. HttpWebRequest Object Header Setting

                foreach (KeyValuePair<string, string> objHeader in objReqHeaderInfo)

                {

                    Common.WriteLog("API", strMethodName + "_Request Header", objHeader.Key + "^" + objHeader.Value);

                    pl_objWebRequest.Headers.Add(objHeader.Key, objHeader.Value);

                }

                ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

                {

                    return (true);

                };

                // Step2-3. HttpWebRequest Method Check

                if (strMethod.Equals("POST"))

                {

                    Common.WriteLog("API", strMethodName + "_Request Data", strRequestData);


                    pl_objWebRequest.ContentLength = strRequestData.Length;


                    // Step2-4. HttpWebRequest Post Data

                    pl_objReqDataStream = pl_objWebRequest.GetRequestStream();                                   //wRequest의 IO객체를 가지고 온다. 

                    pl_objReqDataStream.Write(Encoding.UTF8.GetBytes(strRequestData), 0, strRequestData.Length); //wRequest에 Post로 전달 할 데이터를 입력.

                    pl_objReqDataStream.Close();                                                                 //Stream을 닫아 Close로 Write Lock을 해제한다.

                }


                // Step3. HttpWebResponse Object

                pl_objWebResponse = (HttpWebResponse)pl_objWebRequest.GetResponse();


                // Step4. HttpWebResponse Status Check

                if (pl_objWebResponse.StatusCode.Equals(WebExceptionStatus.ProtocolError))

                {

                    pl_intRetVal = 1001;

                    strErrMsg    = string.Format("[HttpWebRequest_StatusError][StatusCode : {0}][StatusDescription : {1}]", pl_objWebResponse.StatusCode, pl_objWebResponse.StatusDescription);

                    return pl_intRetVal;

                }


                // Step5. HttpWebResponse

                pl_objRepDataStream = pl_objWebResponse.GetResponseStream();

                pl_objRepStreamReader = new StreamReader(pl_objRepDataStream, Encoding.UTF8);


                // Step5-1. HttpWebResponse Header Setting

                foreach (string strHeader in pl_objWebResponse.Headers)

                {

                    Common.WriteLog("API", strMethodName + "_Response Header", strHeader + "^" + pl_objWebResponse.Headers[strHeader]);

                    objResHeaderInfo.Add(strHeader, pl_objWebResponse.Headers[strHeader].ToString());

                }


                // Step5-2. HttpWebResponse Data Setting

                strResponseData = pl_objRepStreamReader.ReadToEnd();


                Common.WriteLog("API", strMethodName + "_Response Data", strResponseData);


                pl_objRepDataStream.Close();

            }

            catch (Exception pl_objError)

            {

                pl_intRetVal = 1000;

                strErrMsg    = string.Format("[{0}][{1}][{2}][{3}]", pl_intRetVal, pl_objError.Message, pl_objError.StackTrace, pl_objError.ToString());

            }

            finally

            {

                pl_objWebRequest      = null;

                pl_objReqDataStream   = null;

                pl_objWebResponse     = null;

                pl_objRepDataStream   = null;

                pl_objRepStreamReader = null;

            }

            return pl_intRetVal;

        }

'개발 > C#' 카테고리의 다른 글

[C#] Linq, SingleOrDefault() vs FirstOrDefault()  (0) 2017.09.01
url 호출하여 a 태그 정보 가져오기  (0) 2017.05.10
Zip 파일 압축풀기  (0) 2017.05.10
JsonConvert Dll  (0) 2015.12.10
Class 내의 다른 Class 사용 시  (0) 2015.12.09

+ Recent posts