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 |