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

goldencz 2009-07-03 10:22:46
我在我的一个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);


另外,我在beforeNavigate函数设置断点观察,传入的PostData指针,是一个VARIANT类型为VT_ERROR,根据MSDN的解释,这种情况通常表示这个variant是一个空值。无论我怎样调整送给Navigate函数的参数,送到这里的POSTDATA始终是VT_ERROR。这似乎表明,postdata这个参数没有起作用?
我怀疑这是PIE的一个BUG,希望能有熟悉PIE和IWebBrowser2的高手来证实或者证否!
...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sevenzhy 2009-07-09
  • 打赏
  • 举报
回复
我直接navigate到自己写的一个网页,网页包含一个提交登录数据的表单,提交操作是可以成功的。
没试过直接使用postdata的操作。
楼主解决了没?分享一下吧。
载舟之水 2009-07-06
  • 打赏
  • 举报
回复
我试过这个控件,是没问题的,可以正常打开网页,但是在某些AKU版本上工作不正常,建议你换个不同的手机试试。
goldencz 2009-07-06
  • 打赏
  • 举报
回复
打开网页没问题,关键是不能发送POST请求。发送GET是没有任何问题的。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧