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

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧) 本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。 阅读详情

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

    飘飘白云 2007/11/8

 

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

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

HRESULT Navigate2(      
    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型的字符数组,具体赋值请参看代码。

用Python玩转农业大数据:从Landsat遥感影像到作物产量预测实战教程 本文详细介绍了如何利用Python处理Landsat遥感影像数据,并结合土壤信息构建作物产量预测模型。从环境搭建、数据预处理到模型训练与可视化,提供了一套完整的农业大数据分析实战方案,帮助读者掌握遥感影像处理和机器学习在精准农业中的应用。 阅读详情

相关推荐

WEB浏览器视频流播放方案

基于Media Source Extensions播放视频流 浏览器播放视频的几种方法 一、H5 video标签 在浏览器播放视频,可以使用HTML5原生的video标签。但其播放的格式使用一定限制的,目前video只支持三种格式WebM、Ogg、MP4。 WebM:WebM 文件使用 VP8 视频编解码器和 Vorbis 音频编解码器 Ogg :Ogg 文件使用 Theora 视频编解码器和 Vorbis音频编解码器 MP4: MPEG 4文件使用 H264 视频编解码器和AAC音频编解码器 上面三种

machh的专栏 2343

Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 Navigate2()原型

CHtmlView类在mfc中是专门用来显示网页的视图类 通常情况下 用户只需将类作为视图类的父类 便可以调用其类中的函数方法进行网页的显示以及刷新等功能 向该类中部分函数的作用以及使用方法 实现连接打开网页,调用该类的函数Navigate2() 便可以实现这个功能 void Navigate2(LPCTSTR lpszURL,DWORD dwFlags = 0, LPCTSTR lpszTarg...

eyetired的博客 851

【超详细】MIT 液态神经网络(LNNs)——深度学习新动向

输入可以是任何形式的时间序列数据,其中表示时间。例如传感器读数、金融市场数据、语音信号等。

allein_STR的博客 2570

有关于微软的IWebBrowser2::Navigate2/Navigate方法

我曾经的要求很简单,只是要在我内置BROWSER发请求在在头里加入COOKIE值,但试来试去都不成,但有趣的是的,我在头里加入其它东西是可行的,如:User-Agent: NetMe请求时加上了,可如果是:Cookie:aa=bb,就加不上,找了好多地方,想找到答案,最后在GOOGLE论坛里有人做了“解释”:它问了微软的人,用该控件无法加COOKIE,FT!!!http://groups.goog

mudboy的专栏 9049

MFC Navigate2是做什么的

对于MFC的类,源码在C:\Program Files\Microsoft Visual Studio\VC98\MFC\路径下,你要查看的OnBeforNavigate2是CHtmlView的一个虚函数,它的定义在AFXHTML.H,和VIEWHTML.CPP中,你在上面的路径下搜索这两个文件就可以了。 void CHtmlView::BeforeNavigate2(LPDISPATCH 

mfmfmmf1的专栏 1839

通过IWebBrowser2Navigate2来打开网页,怎样判断网页是否全部加载完毕

通过IWebBrowser2Navigate2来打开网页,它会返回DISPID_DOCUMENTCOMPLETE表示显示完成。但如果一个页面有多个frame,则每个frame都会产生DISPID_DOCUMENTCOMPLETE事件,所以通过这个事件不能判断一个页面是否全部加载完毕了。后来通过google用以下办法解决了: void CCreateHTMLImage::DocumentC...

weixin_30867015的博客 273

IWebBrowser2 http post

利用IWebBrowser2接口Navigate2方法实现Http POST传输 - alex618 - 博客园

lydstory123的专栏 179

如何: 自动发送表单数据到 Internet Explorer

如何: 自动发送表单数据到 Internet Explorer http://support.microsoft.com/kb/311293/zh-cn 自动化控制器,如 Microsoft Visual Basic 中,可以自动完成 Microsoft Internet Explorer 使用 POST 方法HTTP 服务器 (如 Microsoft Internet

心想事成 1080

Visual C++网络编程经典案例详解 第5章 网页浏览器 制作个性化界面 添加消息响应 Navigate2()函数

函数Navigate2()是CHtmlView类成员函数 用于打开指定网络地址的网页, 其原型如下 void Navigate2(LPCTSTR lpszURL,DWORD dwFlags = 0, LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeaders = NULL, LPVOID lpvPostData = NULL, DWORD dwP...

eyetired的博客 501

Navigate2 compare with Navigate

CWebBrowser2 ctrl provide two method to link a web page: Navigate2(VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)Navigate(LPCTSTR URL, VARIANT* Flags, VAR...

eteran的专栏 468

Flutter开发入门系列-Navigator2的学习和使用

Navigator2 为了提供 Flutter Web的支持新引入了很多的API 概念,比如: Page, Router, RouteDelegate, RouteInformationParser, 除此之外还需要自己管理路由栈,比如 Navigator 1 的复杂度高出了很多。但是这些 API 并不都是必须的,对于一个App的导航框架来说,只需要 Router, Page, RouteDelegate 就可以了,其中 Router, Page 的使用比较简单,主要是 RouterDelegate 比较复

好好学习,天天向上 985

【10天速通Navigation2】(六):Navigation2 导航bringup基础配置和参数详解

本节介绍了基础的`nav2_bringup`的基础参数,并进行了基础的配置。

m0_73800387的博客 8963

mamba 安装包,包括Windows和Linux,causal-conv1d,mamba-ssm, selective-scan-cuda

安装教程参考:https://blog.csdn.net/yyywxk/article/details/140420538 下系列文章,有问题请加主页vxselective_scan 和 selective_scan_cuda_core 请移步vmamba注意,python,torch以及cuda版本必须要和博客里一致。支持算力为7.0-9.0 等目前常见GPU。

kms.zip

kms.zip

上一篇: 怎么利用ffmpeg和AviSynth给在windows下面为flv文件加水印
下一篇: MFC 如何使用动态链接库中的资源
simbi
博客等级 码龄22年 86粉丝 24原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值