none
PIE的web browser control(IWebBrowser2)是否能够发出POST请求?MSDN上说可以,但是我始终不能发送成功。 RRS feed

  • 问题

  • 我在我的一个Windows Mobile项目中,需要使用内嵌的IE浏览器,我使用了Web Browser Control这个控件,通过IWebBrower2这个interface进行控制。但令人郁闷的是,使用这个控件,可以成功的发出GET请求(使用IWebBrowser2::Navigate),但是始终不能发出POST请求。
       我仔细的检查了我的每一行代码,根据网上给出的DEMO,代码本身应该不存在问题。因为我使用了完全相同的代码在WIN32平台上进行测试,发现是可以正常的发出POST请求的。我怀疑是否是WM平台下该控件不支持由API发起POST请求?尽快MSDN上相关材料上说是支持的。
        下面是我的代码,请高手看看是否存在问题,或者是确实是PIE这个控件的问题?

        RECT rectClient;

    GetClientRect(&rectClient);

    CoInitializeEx(NULL, COINIT_MULTITHREADED);



    // create browser control

    BOOL ret = m_browser.CreateControl(CLSID_WebBrowser,

    NULL,

    WS_VISIBLE | WS_BORDER | WS_CHILD,

    rectClient,

    this,

    AFX_IDW_PANE_FIRST);



    LPUNKNOWN lpunk = m_browser.GetControlUnknown();

    HRESULT hr = lpunk->QueryInterface(IID_IWebBrowser2, (void**)&m_pBrowser);

    BSTR url = SysAllocString(L"http://localhost/");



    // post data

    VARIANT vPostData = {0};

    LPSAFEARRAY psa;

    char* postData = "username=name&password=word";

    UINT num = strlen(postData);

    VariantInit(&vPostData);

    psa = SafeArrayCreateVector(VT_UI1, 0, num);



    char* pPostData = NULL ;

    hr = SafeArrayAccessData(psa, (LPVOID*)&pPostData);

    memcpy(pPostData, postData, num);

    hr = SafeArrayUnaccessData(psa);

    V_VT(&vPostData) = VT_ARRAY | VT_UI1;

    V_ARRAY(&vPostData) = psa;



    //headers

    VARIANT vHeader = {0};

    VariantInit(&vHeader);

    BSTR bstrHeaders = SysAllocString(

    L"Content-Type: application/x-www-form-urlencoded\r\n");

    V_VT(&vHeader) = VT_BSTR;

    V_BSTR(&vHeader) = bstrHeaders;



    m_pBrowser->put_Visible(VARIANT_TRUE);

    m_pBrowser->put_AddressBar(VARIANT_TRUE);

    m_pBrowser->put_StatusBar(VARIANT_TRUE);



    VARIANT vUrl ={0};

    VariantInit(&vUrl);

    V_VT(&vUrl) = VT_BSTR;

    V_BSTR(&vUrl)= url;

    hr = m_pBrowser->Navigate2(&vUrl,NULL,NULL,&vPostData,&vHeader);

    2009年6月18日 1:08

全部回复