AJAX 때문에 유명해진 XMLHTTPRequest 입니다 ^^;
사실 저같은 Windows 개발자들은 http 통신을 하는데 수많은 방법이 있지요.
Win32의 HttpOpenRequest 함수나 MFC의 CHttpConection 클래스, 그리고 WinHttp 등..
(일설에 의하면.. XMLHTTPRequest는 WinHttp 를 래핑해서 만들어졌다고 하는군요.)
따라서 사실 굳이 XMLHTTPRequest 를 쓰지 않아도 됩니다.
비동기 통신? 스레드로 돌리면 간단하지요 -_-;
그럼 왜 하필 이런 코드를 올리느냐!
..그냥 왠지 써보고 싶어서 -_-;
Windows 개발자들은 원래 유행에 덜 민감한 편이고 또 그래야 하죠 ;;
괜히 이런 신기술 쪽을 쓰다보면 구버전의 OS에서는 안돌아가고 막 그러니까요.
그럼에도 불구하고.. 이 넘치는 호기심을 주체하지 못하는지라..
어쨌든 서론은 접어두고, 코드 올라갑니다.
장점이라면.. 도메인과 경로를 분리해서 작업하지 않아도 되고,
비동기 통신을 자체적으로 지원한다는 정도일 것 같네요.
(open 하실 때 세번째 인자를 true 로 주면 된다고 합니다. 해보진 않았지만 ;;)
#import "msxml3.dll" using namespace MSXML2; BOOL GetHtml(LPCTSTR tszUrl, LPTSTR tszBuffer, DWORD cbBuffer) { USES_CONVERSION; BOOL bRet = FALSE; HRESULT hr = S_FALSE; IXMLHTTPRequestPtr pIXMLHTTPRequest = NULL; _bstr_t bstrHtml = _T(""); hr = CoInitialize(NULL); if (FAILED(hr)) goto cleanup; hr = pIXMLHTTPRequest.CreateInstance( _T("Msxml2.XMLHTTP.3.0")); if (FAILED(hr)) goto cleanup; hr = pIXMLHTTPRequest->open(_T("GET"), tszUrl, false); if (FAILED(hr)) goto cleanup; hr = pIXMLHTTPRequest->send(); if (FAILED(hr)) goto cleanup; bstrHtml = pIXMLHTTPRequest->responseText; if (bstrHtml.length() == 0) goto cleanup; hr = StringCbCopy(tszBuffer, cbBuffer, OLE2T(bstrHtml)); if (FAILED(hr)) goto cleanup; bRet = TRUE; cleanup: pIXMLHTTPRequest.Release(); CoUninitialize(); return bRet; }