利用
IWebBrowser2接口的Navigate2方法实现Http POST传输
飘飘白云2007/11/8
开发中的社区游戏,要求将原来的mini浏览器扩展成可以通过Http POST传输来打开网页,比如:通过提交用户id,password,用户的action(查看profile,查看日记,打开blog等等),从而在mini浏览器里打开相应的网页。
具体实现是通过获取浏览器的IWebBrowser2指针,用该接口的Navigate2方法来实现,Navigate2在MSDN描述如下,
HRESULTNavigate2(
VARIANT*URL,
VARIANT*Flags,
VARIANT*TargetFrameName,
VARIANT*PostData,
VARIANT*Headers
);
具体参数细节请参看MSDN文档。比较麻烦的是这个函数的参数设置,后面作详细说明,先看代码。这里有如下假定
iBrowser是一个有效的IWebBrowser2指针,
url为有效的地址(如:L"http://172.24.1.241/profile/"),
postData为需要提交的数据(
如:L"userid=kesalin&password=pwd&action=profile")
//飘飘白云(l_zhaohui@163.com)
2007/11/8
IWebBrowser2*
iBrowser;
LPCTSTR
url;
LPCTSTR postData
........//其他代码
//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
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;
delete[]
pPostData;
pPostData =
NULL;
pChar =
NULL;
iBrowser->Navigate2(&vURL, &vFlags, &vNull, &vPostData,
&vHeaders);
}
else {
// GET
iBrowser->Navigate2(&vURL, &vNull, &vNull, &vNull,
&vNull);
}
// Clear
VariantClear(&vURL);
VariantClear(&vFlags);
VariantClear(&vPostData);
VariantClear(&vHeaders);
VariantClear(&vNull);
有三点值得说明:
第一, 数据类型
VT_I4 是指示一个long型的数据,所以要设置
VARIANT的lVal作为值。如代码中的:
vFlags.vt =
VT_I4;
vFlags.lVal =
navNoReadFromCache | navNoWriteToCache;
第二, 如果要实现POST数据提交,不能将Navigate2方法中不需要的参数简单地设置成NULL,必须创建一个VARIANT变量vNull,并对它进行初始化。比如:
VariantInit(&vNull);
vNull.vt =
VT_BSTR;
vNull.bstrVal =
NULL;
……
iBrowser->Navigate2(&vURL, &vFlags, &vNull, &vPostData,
&vHeaders);
第三, vPostData的变量类型是VT_ARRAY |
VT_UI1,其数据是一个SAFEARRAY型的字符数组,具体赋值请参看代码。
分享到:
相关推荐
通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口,里面是源代码,分享给大家
使用windows平台IWebBrowser2接口动态创建Web浏览器 wtl平台(使用MFC类似),使用IWebBrowser2创建IE控件,然后浏览网页,当然也可以显示内存中的html字符流。 支持更改右键,支持禁用滚动条,支持word-break,功能...
IWebBrowser2跨进程传递opener的方法,主要代码已经在资源中,按步骤就可以实现。有不解的地方也可以给我留言。
IWebBrowser2的两个工程 vc6.0 IWebBrowser2的两个工程 vc6.0 IWebBrowser2的两个工程 vc6.0 IWebBrowser2的两个工程 vc6.0
基于IWebBrowser2和ActiveX控件制作的多标签浏览器,纯API实现了动态添加标签按钮,动态删除标签按钮,等功能。
IWebBrowser接口的使用源码,可以扫描浏览器实例,绝对经典!可以扫描到网页中的所有元素。源码中仅扫描了文本
微软的drillerMFC源码。 可以去除IWebBrowser2边框。 另附网络上其他人总结的使用方法http://blog.csdn.net/tangyin025/article/details/8675513 请参考文章与源码自行使用。
基于win32(非MFC)使用IWebBrowser,实现自定义浏览器的功能,代码很清晰,可以作为初学者的入门级代码,方便后续的扩展使用
这是一个类似彗星开发小助手的东西,感觉比彗星开发小助手用起来要方便,功能要更强大。是autohotkey官网上下载来的(当然是英文版的,很容易看)。现在献给大家,希望大家会喜欢。
通过IWebBrowser2登录不带验证码的网站,很简单
利用IServiceProvider->QueryService,用Document对象得到IWebbrowser2对象: 思维拓展: 获得IWebbrowser2对象后即可对当前Webbrowser进行完全控制:例如,前进、后退以及执行ExecWB命令 获得IWebbrowser2对象后...
在Visual Studio 6.0中出现了一个新类CHtmlView,利用这个类,我们可以实现在对话框的控制中显示HTML文件。...通过IWebBrowser2接口来实现,而且IWebBrowser2与MFC文档/视图结构之间没有任何关系。
浏览器开发案例,c++开发,vs2003版本
1、获取IWebBrowser(ActiveX 插件) 初始化对象接口 2、根据1中的初始化接口, 获取组件的 IID_IHTMLDocument2 对象 接口
易语言-获得外部IWebbrowser2达到对外部Webbrowser的完全控制
3.IE把IWebBrowser2(浏览器插件)传到 BHO 的 SetSite 方法,用户在此方法中可挂载自己的事件处理方法。 4.窗口关闭时,IE把 null 传到 BHO 的 SetSite 方法,此方法用来去掉挂载的事件处理方法。
混音 混合使用c和html通过IWebBrowser2构建简单的Windows桌面应用程序 从头开始基于我的旧私人项目 在制品 参考
IWebBrowser2组件的Navigate函数以及Navigate2(可拦截通过COM组件弹出)。 还有CreateProcessInternalW(可拦截通过进程创建弹出)。 未完成:1.多线程情况下的拦截 2.对已注入进程新创建出的进程的注入拦截
主要是介绍如何对webbrowser和IE编程。
你想在程序中,播放背景音乐吗?你想在程序中,播放广告FLASH吗?你想在程序中,显示WORD文件吗?你想在程序中,显示PDF...关键字:Activex,ocx,ie,IWebBrowser2,CHtmlView,OnBeforeNavigate2,Navigate,pdf,music.word