`
testcs_dn
  • 浏览: 114456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

利用IWebBrowser2接口的Navigate2方法实现Http POST传输

 
阅读更多
利用IWebBrowser2接口的Navigate2方法实现Http POST传输

飘飘白云2007/11/8

开发中的社区游戏,要求将原来的mini浏览器扩展成可以通过Http POST传输来打开网页,比如:通过提交用户idpassword,用户的action(查看profile,查看日记,打开blog等等),从而在mini浏览器里打开相应的网页。

具体实现是通过获取浏览器的IWebBrowser2指针,用该接口的Navigate2方法来实现,Navigate2MSDN描述如下,

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型的数据,所以要设置 VARIANTlVal作为值。如代码中的:

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接口

    标题中的“通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口”涉及到的是在Windows应用程序开发中,如何从一个窗口句柄(HWND)获取到IE浏览器组件的接口,以便进行更深入的网页操作和控制。这个过程通常用于自动...

    使用windows平台IWebBrowser2接口动态创建Web浏览器

    使用windows平台IWebBrowser2接口动态创建Web浏览器 wtl平台(使用MFC类似),使用IWebBrowser2创建IE控件,然后浏览网页,当然也可以显示内存中的html字符流。 支持更改右键,支持禁用滚动条,支持word-break,功能...

    IWebBrowser2的两个工程 vc6.0

    3. **实现接口**:在对话框类中添加IWebBrowser2的接口指针,以及相关的事件处理函数。 4. **初始化控件**:在对话框的初始化函数中,使用`QueryInterface`获取IWebBrowser2接口,并设置其属性,如禁用工具栏和菜单...

    基于IWebBrowser2和ActiveX控件制作的多标签浏览器。欢迎参考,提供所有源代码。

    本项目利用了IWebBrowser2接口和ActiveX控件,构建了一个支持多标签浏览模式的应用程序。IWebBrowser2是微软提供的一个COM接口,它允许开发者集成Internet Explorer的功能到自己的应用程序中,而ActiveX控件是一种在...

    IWebBrowser接口的使用源码 扫描浏览器实例 绝对经典!

    例如,你可以使用`CoCreateInstance`函数来创建`IWebBrowser2`接口的实例,它是`IWebBrowser`接口的增强版本,提供了更多功能。 源码中提到的“扫描浏览器实例”,是指遍历系统中活动的`WebBrowser`控件,获取它们...

    最原始的win32中内嵌IWebBrowser(c++)

    最后,为了能够接收和处理IWebBrowser2发出的事件,如页面加载完成、前进、后退等,你需要实现IDispatch接口,并通过IWebBrowser2的SetSinkPoint或Advise方法注册事件监听器。 以上只是一个简化的流程概述,实际的...

    IWebBrowser2跨进程传递opener的方法

    IWebBrowser2跨进程传递opener的方法,主要代码已经在资源中,按步骤就可以实现。有不解的地方也可以给我留言。

    IWebBrowser2登陆网站(无验证码的)

    通过调用IWebBrowser2的Navigate方法,可以设置浏览器访问的地址。传入的参数包括URL字符串和其他导航选项。 3. **处理导航事件** 为了确保页面加载完成后再执行后续操作,我们需要监听IWebBrowser2的...

    IWebBrowser

    3. **IWebBrowser2.cpp**:此文件实现了与IWebBrowser2接口相关的代码。IWebBrowser2是IWebBrowser接口的扩展,提供了更多的功能,如导航、历史管理、书签等。 4. **stdafx.cpp**:预编译头文件,包含常用库的引用...

    eVC_AdvancedLab.doc

    同时,还可以利用IWebBrowser2的其他方法,如GoBack、GoForward、Refresh等,实现浏览器的基本导航功能。 此外,为了呈现HTML内容,我们需要在窗口上设置控件的尺寸和位置,以便IWebBrowser2可以正确显示网页。这...

    MFC添加网页的两种方法

    4. 设置导航属性:通过IWebBrowser2接口的Navigate方法,可以加载指定URL的网页。 5. 绑定事件处理程序:使用IDispatch接口的Invoke方法,可以接收并处理Web浏览器发出的事件,如网页加载完成、超链接点击等。 ...

    实现和IE浏览器交互的方法介绍.doc

    对于记录浏览历史,可以通过实现IHistoryStg接口,利用IWebBrowser2的`GoBack`和`GoForward`方法来追踪用户的浏览路径。分析用户行为则需要监听和解析用户与网页的交互,例如点击链接、提交表单等。 过滤和翻译网页...

    IWebBrowser2控件去除边框

    微软的drillerMFC源码。 可以去除IWebBrowser2边框。 另附网络上其他人总结的使用方法http://blog.csdn.net/tangyin025/article/details/8675513 请参考文章与源码自行使用。

    源代码——MFC的WebBrowser控件 C++与JavaScript之间数据交互传递

    7. **C++到JavaScript的数据传递**:C++可以通过`IWebBrowser2::ExecWB`或`IWebBrowser2::Navigate2`方法执行JavaScript代码,将数据作为参数传递。也可以设置`IWebBrowser2`的`Document`属性,间接修改HTML页面内容...

    vc操作网页元素源码

    在本项目中,“vc操作网页元素源码”利用了VC与Internet Explorer(IE)浏览器的接口,IWebBrowser2,来实现对网页元素的直接操作,从而达到自动化处理的目的,例如截取网页内容、复制文本,以及模拟鼠标事件等。...

    iwebbrowser2 learner

    这是一个类似彗星开发小助手的东西,感觉比彗星开发小助手用起来要方便,功能要更强大。是autohotkey官网上下载来的(当然是英文版的,很容易看)。现在献给大家,希望大家会喜欢。

    实现IE接口,用IE定制自己的界面

    **IE事件**包括但不限于OnDocumentComplete、OnClick、OnDblClick等,开发者可以通过实现IWebBrowser2接口或相关接口来处理这些事件。 **IE自画**不仅限于基本的绘图,还可以包括创建自定义的浏览器菜单、工具栏...

    如何对webbrowser和IE编程

    但在IE4之后,引入了`IWebBrowser2`接口来扩展WebBrowser的功能,此接口继承自`IWebBrowserApp`。 ##### 2. IWebBrowser接口 - **基本功能**:`IWebBrowser`接口是WebBrowser Control最初的接口,提供了基本的导航...

    易语言-获得外部IWebbrowser2达到对外部Webbrowser的完全控制

    在“易语言-获得外部IWebbrowser2达到对外部Webbrowser的完全控制”这个主题中,我们主要探讨的是如何通过易语言来操作和控制外部的Web浏览器,特别是使用COM接口IWebbrowser2来实现这一目标。 IWebbrowser2是...

    Fire-IE-master.zip_fire

    创建一个简单的C++项目,引入必要的头文件(如“Shobjidl.h”),然后实例化并初始化IWebBrowser2接口: ```cpp #include #include CoInitialize(NULL); CComPtr&lt;IWebBrowser2&gt; pBrowser; pBrowser....

Global site tag (gtag.js) - Google Analytics