Web 사이트에서 로그인 처리를 C#에서 처리하는 방법을 간단하게 적어둔다.
로그인 버튼을 누르면 아이디와 패스워드 입력 값이 있는지 없는지 체크를 한다.
private void btnOK_Click(object sender, EventArgs e)
{
if (this.txtID.Text == "")
{
MessageBox.Show("로그인 아이디를 입력하세요", "알림", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtID.Focus();
}
else if (this.txtPwd.Text == "")
{
MessageBox.Show("로그인 비밀번호를 입력하세요", "알림", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtPwd.Focus();
}
else
{
strSessionID = doLogin(txtID.Text, txtPwd.Text);
if (strSessionID.Length > 0)
{
this.Close();
}
}
}
이제 실제 로그인 검사를 하는 doLogin(string ID, string PW) 함수를 만들어야 한다.
using System.Net;
using System.IO;
MessageBox.Show(resResult); 부분은 메시지 확인이 다 끝났으면 주석처리를 한다.
resResult.IndexOf 메소드를 이용하여 메시지에서 키워드를 추출하여 포함여부를 체크하여 로그인의 정상/비정상 메시지를 확인할 수 있게 한다.
Web Header 정보는 HTTP Analyzer V7 을 이용해서 확인할 수 있다.
로그인 함수는 만들기 나름이다.
postData 정보인 userID, userPW 정보를 보내서 받은 결과값(화면에 뿌리는 결과, PHP 에서는 echo 결과) 을 가지고 원하는 정보를 파싱해서 로그인 처리를 하게 된다.
만들기에 따라서는 간단하게 코드화를 해서 코드값만 결과로 받아서 처리할 수도 있다.
쿠키정보 값을 알아내려면
string cookie = webResponse.GetResponseHeader("Set-Cookie");
MessageBox.Show(cookie);
를 이용해서 쿠기값을 확인해볼 수가 있다.
그런 다음에 원하는 세션 정보만 추출해서 저장한다.
private string doLogin(string ID, string PW)
{
string url = "http://www.abc.com/";
// Web Header 분석기에서 구한 PostData 정보를 여기에 적는다
string PostData = string.Format("r=home&a=login&id={0}&pw={1}", ID.Trim(), PW.Trim());
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
byte[] sendData = UTF8Encoding.UTF8.GetBytes(PostData);
webRequest.Method = "POST";
webRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.KeepAlive = true;
webRequest.AllowAutoRedirect = false;
Stream dataStrem = webRequest.GetRequestStream();
dataStrem.Write(sendData, 0, sendData.Length);
dataStrem.Close();
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
StreamReader readStream = new StreamReader(webResponse.GetResponseStream(), System.Text.Encoding.UTF8, true);
string resResult = readStream.ReadToEnd().Trim();
MessageBox.Show(resResult); // 패스워드 정상 / 비정상 메시지를 확인한다.
readStream.Close();
webResponse.Close();
CK = false;
if(resResult.IndexOf("history.go(-1);//]]>") < 0) // 웹페이지 메세지가 없으면
{
if (webResponse.GetResponseHeader("Set-Cookie").IndexOf("PHPSESSID=") != -1)
{
CK = true;
strSessionID = SSplit(SSplit(webResponse.GetResponseHeader("Set-Cookie"), "PHPSESSID=", 1), ";", 0);
strID = txtID.Text;
}
else
{
strID = string.Empty;
}
}
else
{
strID = string.Empty;
}
return strID;
}
public static string SSplit(string _body, string _parseString, int index)
{
string varTemp = _body.Split(new string[] { _parseString }, StringSplitOptions.None)[index];
return varTemp;
}
'C# > 통신' 카테고리의 다른 글
C# comboBox 에 Text, Value 추가 및 POST, JSON (0) | 2016.08.19 |
---|---|
C# comboBox 에 Text, Value 추가, 서버와 JSON 연동 (0) | 2016.08.19 |
C# JSON 과 dataGridView 연동 개념 이해 (0) | 2016.08.18 |
C# Web 사이트에 PostData 저장하기 (0) | 2016.03.20 |
C# 웹(인터넷)에 있는 파일 읽어오기 (0) | 2016.01.22 |