IT_Programming/MFC · API

CWebBrowser2(웹브라우저 컨트롤)에서 POST 방식으로 데이터 넘기기

JJun ™ 2007. 12. 5. 00:16

다이얼로그웹브라우저 컨트롤CWebBrowser2를 삽입하고,

CWebBrowser2 에 쿠키를 설정하려고 했으나 실패(CInternetSession과 연결 시도 실패)하고,

결국 POST 방식으로 하려 했으나....여러번 실패 끝에 성공을 하였다.

Post Data를...일반 문자열 BSTR이 아닌 VT_ARRAY로 해야하는 것을 간신히 찾았다.

참고로 m_ctlWebBrowser의 형은 다음과 같다.

 

    CWebBrowser2    m_ctlWebBrowser;

------------------------------------소  스-------------------------------------

    CString strUrl = _T("http://www.dukgun.com/test.asp");
    CString strHeader = _T("Content-Type: application/x-www-form-urlencodedrn");   

    // _T("")으로 해도 됨
    CString strPostData = _T("id=yunskorea&passwd=1234");  // POST 데이터

    // HTTP 헤더
    VARIANT vHeader;
    vHeader.vt = VT_BSTR;
    vHeader.bstrVal = strHeader.AllocSysString();

    // POST 데이터 변환
    SAFEARRAY FAR *sfPost = NULL;
    SAFEARRAYBOUND bound;
    bound.cElements = strPostData.GetLength();//_tcslen(strPost);
    bound.lLbound = 0;
    sfPost = SafeArrayCreate(VT_UI1, 1, &bound);
    for (long lIndex = 0;lIndex < (signed)bound.cElements;lIndex++)
    {
        SafeArrayPutElement(sfPost, &lIndex, strPostData.GetBuffer(bound.cElements)+lIndex);
    }
    strPostData.ReleaseBuffer();
   
    VARIANT vaPost;
    vaPost.vt = VT_ARRAY;
    vaPost.parray = sfPost;

    m_ctlWebBrowser.Navigate(m_strURL,0,NULL,&vaPost,&vHeader);

    SafeArrayDestroy(sfPost);

-------------------------------------------------------------------------------

POST 데이터를 VT_ARRAY형이 아닌 VT_BSTR로 할 경우...

POST 방식이 아닌 GET 방식으로 호출되어, POST 데이터를 아예 인식 못하게 된다.


                                                                                  -- Written by dukgun.com(덕근닷컴) --