6.0버전에서 POST 방식을 사용하기 위해서는 Unicode 및 몇가지 세팅 작업을 해야됩니다.
VC6.0 에서 Unicode 세팅방법.
#1. Project -> Setting -> C/C++ 에서
Preprocessor definitions: 항목에서 _MBCS 를 지우고 UNICODE,_UNICODE 를 추가
#2. libcmtd.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
위 링크에러 발생시 프로젝트 세팅 링크탭에서
/entry:"wWinMainCRTStartup" 옵션을 추가
#3. mfc42u.lib 오류가 발생하면 첨부파일을 다운받아서 압축을 풀어서 아래 경로에 복사합니다.
( C:\Program Files\Microsoft Visual Studio\VC98\Lib )
//====================================================================================
HRESULT hr;
IWebBrowserApp* pWBApp = NULL;
BSTR bstrURL = NULL, bstrHeaders = NULL;
VARIANT vFlags = {0}, vTargetFrameName = {0}, vPostData = {0}, vHeaders = {0};
CString strPostData = _T( "id=test&pw=1234" ); // POST로 전달 할 파라메타
CoInitialize( NULL );
if( FAILED( hr = CoInitialize(NULL) ) )
{
return;
}
if( FAILED( hr = CoCreateInstance( CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowserApp(LPVOID*)&pWBApp) ) )
{
return;
}
bstrURL = SysAllocString( _T("http://www.test.com/login.php") ); // 로그인 할 URL 주소
if( !bstrURL )
{
return;
}
bstrHeaders = SysAllocString( _T("Content-Type: application/x-www-form-urlencoded") );
if( !bstrHeaders )
{
return;
}
vHeaders.vt = VT_BSTR;
vHeaders.bstrVal = bstrHeaders;
SAFEARRAY FAR *sfPost = NULL;
SAFEARRAYBOUND bound;
bound.cElements = strPostData.GetLength();
bound.lLbound = 0;
sfPost = SafeArrayCreate( VT_UI1, 1, &bound );
for( long idx = 0; idx < (signed)bound.cElements; idx++ )
{
SafeArrayPutElement( sfPost, &idx, strPostData.GetBuffer(bound.cElements) + idx );
}
strPostData.ReleaseBuffer();
VARIANT vaPost;
vaPost.vt = VT_ARRAY;
vaPost.parray = sfPost;
hr = pWBApp->Navigate( bstrURL, &vFlags, &vTargetFrameName, &vaPost, &vHeaders );
//pWBApp->put_Visible( VARIANT_TRUE ); // IE새창 띄우기
SafeArrayDestroy( sfPost );
Sleep( 1000 );
IDispatch* pHtmlDispatch = NULL;
IHTMLDocument2* pHtmlDoc = NULL;
IHTMLElement* pBody = NULL;
pWBApp->get_Document( &pHtmlDispatch );
pHtmlDispatch->QueryInterface( IID_IHTMLDocument2, (LPVOID*)&pHtmlDoc );
pHtmlDoc->get_body( &pBody );
BSTR bstrBody;
pBody->get_outerHTML( &bstrBody );
CString strBody;
strBody.Format( _T("%s"), bstrBody );
AfxMessageBox( strBody );
SysFreeString( vHeaders.bstrVal );
SysFreeString( vTargetFrameName.bstrVal );
pWBApp->Release();
pHtmlDispatch->Release();
pHtmlDoc->Release();
pBody->Release();
CoUninitialize();
