IWebBrowser2 发送post请求

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);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值