웹, HTML

자동로그인 포스트 방식 참조

디버그정 2009. 7. 4. 12:13

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=276203&ref=276203


서버-사이드 처리에서는

HTML 에서의 폼으로 알려진 객체들의 NAME 을 판단하여 처리를 합니다.


예를 들어 POST 방식의 폼에서 아이디는 USER, 비밀번호는 PASS 로 된 페이지가 있다고 합시다.


이것은 서버에


다음과 같이 보낼 것입니다.


POST /directory/filename.ext HTTP/1.0

(Header Information)

Content-Length:

Cookie:


USER=test&PASS=3(Form Information)


다음과 같이 보내집니다.


그리고 이것을 MFC 의 Wininet 클래스로 구현하자면


    CInternetSession session;

    CHttpConnection* pHttpConnection = NULL;

    CHttpFile* pFile = NULL;

    CString result;


    try

    {

        pHttpConnection = session.GetHttpConnection("homepage address");

        pFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, "/fgn/fgn.php");

        session.SetCookie(pFile->GetFileURL(), "c_mid", "msvisualc";

        pFile->SendRequest(NULL, 0, "name=정현우", strlen("name=정현우"));

        CString temp;

        do

        {

            pFile->ReadString(temp);

            result += temp + "\n";

        } while(temp != "");


    }

    catch(CInternetException* ex)

    {

        ex->ReportError();

        ex->Delete();

    }


    if(pFile != NULL)

    {

        delete pFile;

        pFile = NULL;

    }

    if(pHttpConnection != NULL)

    {

        delete pHttpConnection;

        pHttpConnection = NULL;

    }


이정도로 구현할 수 있습니다.

위의 소스에는 쿠키도 저장할 수 있으며

POST 정보도 보낼 수 있습니다.


한번 해보시기 바랍니다.


아 그리고 세션 유지 여부는 잘 모르겠네요. 한번 직접 해보시는 것이 어떨까 하고 추천합니다. ^^;


P.S. 참고로 저는 간단하게 server-side 와 통신할 게 있어서 님처럼 사용하는데

wininet 로 POST 데이터가 잘 안넘어가지더군요. ^^; 그래서 그냥 직접 소켓으로 전송하고 있습니다.

저만 안되는 것일 수도 있으니까 일단 mfc 로 해보시구요. 안되면 다른 방법을 찾아봐야겠죠.