12 24 2008
ASP.NET UTF-8 상태에서 서울신용평가 실명 확인하기
ASP.NET에서는 보통 UTF-8 인코딩을 사용하여 작업하게 되지만,
서울신용평가 실명확인 서비스는 아직 UTF-8 인코딩을 지원하지 않는다.
이를 위해 EUC-KR로 만든 페이지를 통해 요청을 보내고 받는 편법을 사용할 수도 있다.
하지만 이것은 보통의 ASP.NET 사용과는 다르기때문에 마음에 들지 않는다.
이것은 다음과 같이 하여 문제를 처리할 수 있다.
또한 이 방법은 실명 확인 뿐 아니라 SMS 서비스와 같이 EUC-KR만 지원하는 각종 서비스를 이용하는 방법으로 사용할 수 있다.
<%@ Page Language="C#" ... %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="log4net" %>
<script runat="server">
// 로그
private static readonly ILog log = LogManager.GetLogger("Some.Web");
// 서울신용평가 실명확인 URL
private static readonly string SIREN24_URL = "https://name.siren24.com/servlet/name_check";
// 실명확인 요청하는 페이지
private static readonly string CHECK_URL = "http://some.com/check.aspx";
// 실명확인 결과 페이지
private static readonly string CHECK_RESULT = "http://some.com/check_result.aspx";
/// <summary>
/// 실명 확인하기 버튼 클릭
/// </summary>
void Submit_ServerClick(object sender, EventArgs e) {
StringBuilder sb = new StringBuilder());
sb.Append("id=SOMEID&");
sb.Append("name=").Append(Name.Value).Append("&");
sb.Append("jumin1=").Append(Jumin1.Value).Append("&");
sb.Append("jumin2=").Append(Jumin2.Value).Append("&");
sb.Append("ok_url=").Append(CHECK_RESULT);
string result = CheckSiren24(SIREN24_URL, sb.ToString(), CHECK_URL);
if(result == null) {
// Error
}
...
}
/// <summary>
/// 서울신용평가 실명확인
/// </summary>
///
/// <param name="url">서울신용평가 실명확인 URL</param>
/// <param name="parameters">매개변수</param>
/// <param name="referer">실명확인 URL을 요청하는 URL 정보</param>
///
/// <returns>실명확인 결과를 문자열로 반환한다. 실패하면 null</returns>
string CheckSiren24(string url, string parameters, string referer) {
try {
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Referer = referer;
req.Method = WebRequestMethods.Http.Post;
req.ContentType = "application/x-www-form-urlencoded";
byte[] data = ToEucKr(parameters);
req.ContentLength = data.Length;
Stream stream = req.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
WebResponse res = req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream(),
Encoding.GetEncoding("EUC-KR")
);
string result = reader.ReadToEnd();
reader.Close();
return result;
} catch(Exception ex) {
log.Error("Exception=" + ex);
}
return null;
}
/// <summary>
/// 유니코드 문자열을 EUC-KR 인코딩 변환
/// </summary>
///
/// <param name="source">변환할 유니코드 문자열</param>
///
/// <returns>EUC-KR 인코딩된 바이트 배열</returns>
byte[] ToEucKr(string source) {
byte[] b = Encoding.Unicode.GetBytes(source);
return Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding("EUC-KR"), b);
}
</script>
...
<form runat="server">
성명: <input type="text" id="Name" runat="server" ... /><br/>
주민번호: <input type="text" id="Jumin1" runat="server" .../>
<input type="text" id="Jumin2" runat="server" .../><br/>
<asp:ImageButton ID="BtnCheckJumin" OnClick="Submit_ServerClick" runat="server" ../>
</form>
서울 신용평가 실명 확인 결과는 다음과 같이 HTML로 되어있다.
<html>
<head>
<script language="JavaScript">
function redirect(form)
{
form.submit();
}
</script>
</head>
<body onLoad="JavaScript:redirect(document.target);">
<form name=target method=post action="http://some.com/check_result.aspx">
<input type=hidden name=jumin1 value="111111">
<input type=hidden name=jumin2 value="1111111">
<input type=hidden name=name value="홍길동">
<input type=hidden name=result value="1">
</form>
</body>
</html>
따라서 결과 문자열 중에 위의 굵게 표시된 result 값을 꺼내어 상태를 확인한다.
5 14, 2009 @ 14:39:33
안녕하세요
위 부분 코딩은 check.aspx 파일인것 같은데요
그럼 check_result.aspx 파일은 어떻게 만들어야 하나요??
잘 안되네요
수고하세요
5 14, 2009 @ 16:34:38
check_result.aspx 파일은 의미가 없습니다.
사실상 ok_url은 check.aspx로 사용해도 됩니다.
CheckSiren24()를 사용하여 얻은 result에 따라 화면 처리만 하면 되기때문입니다.
화면 처리는 나중에 하고 result 를 제대로 받았는지 확인하면 될 것입니다.
7 19, 2009 @ 05:56:03
한가지 궁금한게 있습니다.
사용하신 코드 C#그대로 사용도 가능합니까?
단지 사용환경이 ASP.net이라서 가능성이 보이긴합니다만…
7 19, 2009 @ 16:20:34
C#으로 사용이 가능한 지에 대한 질문은 C# 클래스와 같이 라이브러리 구현을 말하는 것인지요.
C#으로 구현된 ASP.NET 코드이므로 “그대로”는 당연히 안되겠죠.
버튼 클릭과 같은 함수에 대한 수정만 조금한다면 C# 클래스로 사용 가능할 것입니다.
8 11, 2009 @ 16:19:18
안녕하세요.
UTF-8에서 검색 키워드를 넘겨면 EUC-KR페이지에서 문자열을 변환하여 받고자 합니다.
위 코드를 응용하면 가능할듯한데.. 잘 안되네요.
위 코드는 보내고 결과를 받게되어있는데.. 제가 구현하고자 하는것은 그냥 URL로 이동하면서
http://www.abc.com?Query=한글 이렇게 값이 넘어가야합니다.
어떻게 구현이 안될까요?? 아무리 응용해볼려고 해도 잘 안되네요
asp.net (UTF-8) -> asp (EUC-KR) 입니다.
8 13, 2009 @ 19:44:16
요청 후 결과를 받는 것이 아니라 단순히 페이지 요청을 하는 것이라면 이와 같이 할 것이 아니라
form 태그의 accept-charset 속성(Firefox)이나 스크립트에서 document.charset (IE)을 이용하여
대상 페이지로 전달하는 것이 어떨까 합니다.
accept-charset으로 검색해보시면 예제를 찾아 볼 수 있을 것입니다.
1 26, 2012 @ 22:46:17
많은 도움 되었습니다, 감사합니다^^
참고로 저는 Encoding.Unicode 대신, Encoding.UTF8 사용했습니다.
두 가지가 차이가 있는지는 미처 확인해 보지 못했네요.