728x90

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;
}


728x90
블로그 이미지

Link2Me

,