void CCWebBrowser2_TestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
IWebBrowser2* iBrowser;
LPCTSTR url;
LPCTSTR postData;
url = _T("http://192.111.111.80/DBS/login.aspx");
postData = _T("Action=CheckInPost&Name=oisPost");
// .......other codes.
//Get size of Post Data
int size = WideCharToMultiByte(CP_ACP, 0, postData, -1, 0, 0, 0, 0);
VARIANT vURL;
VARIANT vFlags;
VARIANT vPostData;
VARIANT vHeaders;
VARIANT vNull;
// Init
VariantInit(&vURL);
VariantInit(&vFlags);
VariantInit(&vPostData);
VariantInit(&vHeaders);
VariantInit(&vNull);
// Set value
vNull.vt = VT_BSTR;
vNull.bstrVal = NULL;
vHeaders.vt = VT_BSTR;
vHeaders.bstrVal = SysAllocString(L"Content-Type: application/x-www-form-urlencoded/r/n");
vFlags.vt = VT_I4;
vFlags.lVal = navNoReadFromCache | navNoWriteToCache;
vURL.vt = VT_BSTR;
vURL.bstrVal = SysAllocString(url);
if (size > 1) {
// POST
char* pPostData = new char[size + 1];
WideCharToMultiByte(CP_ACP, 0, postData, -1, pPostData, size, 0, 0);
SAFEARRAY FAR* sfPost = NULL;
SAFEARRAYBOUND bound;
bound.cElements = (ULONG) (strlen(pPostData));
bound.lLbound = 0;
sfPost = SafeArrayCreate(VT_UI1, 1, &bound);
char* pChar = pPostData;
for (long lIndex = 0; lIndex < (signed)bound.cElements; lIndex++) {
SafeArrayPutElement(sfPost, &lIndex, (void*)((pChar++)));
}
vPostData.vt = VT_ARRAY | VT_UI1;
vPostData.parray = sfPost;
m_ctrhtml.Navigate2(&vURL, &vFlags, &vNull, &vPostData, &vHeaders);
SafeArrayDestroy(sfPost); //网络上原来的例子的 释放顺序导致了 只能get请求。因为vPostData被提前释放了
delete[] pPostData; //当vPostData为空时候,默认为get请求。
pPostData = NULL;
pChar = NULL;
}
else {
// GET
m_ctrhtml.Navigate2(&vURL, &vNull, &vNull, &vNull, &vNull);
}
// Clear
VariantClear(&vURL);
VariantClear(&vFlags);
VariantClear(&vPostData);
VariantClear(&vHeaders);
VariantClear(&vNull);
}