①、WinINet与WinHttp的异同点,为什么使用WinHttp讲解?

详情见:《WinINet与WinHttp总结》文档,已经打包给大家了。

②、WinHttp接口调用方式:
微软官方地址:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspx
WinHttp微软提供了两种调用方式:C++调用API的版本、COM组件的版本。这里面使用的是 C++ Interface 接口的组件的方式来给大家讲解。

③、WinHttp常用命令讲解:
详情见:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspx

/*①、获取网页源码的步骤:
1、COM组件初始化;
2、定义WinHttp对象指针;
3、创建并实例化WinHttp组件;4、调用Open方法打开连接;
5、调用Send方法发送请求;
6、获取ResponseText返回的文本;7、释放WinHttp组件对象;
8、释放WinHttp对象指针;
9、卸载COM组件;*/

/*②、使用WinHttp3种方法的优缺点
1、类型库生成包装类的方式:优点->使用方便,贴近C++,缺点->COM接口的默认缺省参数必须填写,不灵活;
2、import+接口方式:优点->COM接口的申请与释放自己控制,很灵活,缺点->控制不好,引起内存泄露,且COM组件的实例化参数较多;
3、import+智能指针包装类的方式:优点->智能指针,使用方便,不用担心内存泄露,COM组件实例化简单,可使用COM组件的默认缺省参数;*/

下面给出三种方法的使用示例:

方法1:

// 方法1 类型库生成包装类的方式:优点->使用方便,贴近C++,缺点->COM接口的默认缺省参数必须填写,不灵活;
void CHttpTestDlg::OnBnClickedButton1()
{CoInitialize(NULL);CWinHttpRequest* pWinHttp = new CWinHttpRequest;BOOL bRet = pWinHttp->CreateDispatch(L"WinHttp.WinHttpRequest.5.1");if (!bRet)  return;//    CLSID clsid = { 0 };
//    CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);
//    pWinHttp->CreateDispatch(clsid);
COleVariant async = VARIANT_FALSE;pWinHttp->Open(L"GET", L"http://www.baidu.com", async);pWinHttp->Send(vtMissing);CString strSrc = pWinHttp->get_ResponseText();MessageBox(strSrc);pWinHttp->ReleaseDispatch();delete pWinHttp;CoUninitialize();
}

// 以上,CWinHttpRequest是类型库生成包装类

方法2:

#import "C:\\windows\\SysWOW64\\winhttp.dll" no_namespace
// 方法2
void CHttpTestDlg::OnBnClickedButton2()
{BSTR bstrBody;CString strBody;CoInitialize(NULL);IWinHttpRequest* pHttpReq = NULL;HRESULT hr = \CoCreateInstance(__uuidof(WinHttpRequest),nullptr,CLSCTX_ALL,__uuidof(IWinHttpRequest),(PVOID*)&pHttpReq);if (FAILED(hr)){goto _exit0;}hr = pHttpReq->Open(L"GET", L"http://www.baidu.com");if (FAILED(hr)){goto _exit1;}hr = pHttpReq->Send();if (FAILED(hr)) {goto _exit1;}hr = pHttpReq->get_ResponseText(&bstrBody); // <=> _bstr_t bStrRsp = pHttpReq->ResponseText;if (FAILED(hr)) {goto _exit1;}strBody = bstrBody;MessageBox(strBody);_exit1:pHttpReq->Release();_exit0:CoUninitialize();
}

方法3:

#import "C:\\windows\\SysWOW64\\winhttp.dll" no_namespace
// 方法3
void CHttpTestDlg::OnBnClickedButton3()
{BSTR bstrBody;CString strBody;CoInitialize(NULL);IWinHttpRequestPtr pHttpReq = NULL;HRESULT hr = pHttpReq.CreateInstance(__uuidof(WinHttpRequest));if (FAILED(hr)){goto _exit0;}hr = pHttpReq->Open(L"GET", L"http://www.baidu.com");if (FAILED(hr)) {goto _exit0;}hr = pHttpReq->Send();if (FAILED(hr)) {goto _exit0;}pHttpReq->get_ResponseText(&bstrBody);strBody = bstrBody;MessageBox(strBody);_exit0:CoUninitialize();
}

转载于:https://www.cnblogs.com/Lthis/p/4926410.html

POST教程笔记 - WinHttp获取网页源码相关推荐

  1. vc++获取网页源码之使用import+接口方式

    1.使用IWinHttpRequest获取网页源码 首先要创建基于对话框的mfc应用程序 2.import+接口方式 首先导入winhttp.dll,使用IWinHttpRequest接口 #impo ...

  2. Delphi XE下获取网页源码记录

    存放个自己写的获取网页源码,掌握了: 1.利用CreateOLEObject方式获取源码 2.自动判断网页格式编码 需要使用到的单元:Winapi.ActiveX,System.Win.ComObj, ...

  3. 使用WebBrowser控件获取网页源码的方法

    使用WebBrowser控件获取网页源码的方法,网上有很多介绍,但绝大多数的人都是使用以下的方法获取: (WebBrowser1.Document as IHtmlDocument2).body.ou ...

  4. webclient无法获取html文件,C# WebClient获取网页源码的方法

    效果如图 完整代码如下using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  5. [转载]关于webbrowser,innet,xmlhttp获取网页源码的比较!

    webbrowser: 示例: For i = 0 To WebBrowser1.Document.All.length - 1      If WebBrowser1.Document.All(i) ...

  6. PHP如何获取网页源码?

    很多人可能会说那不是很简单 直接 file_get_contents ,但是有的时候这样也是获取不到的 那怎么办? 用CURL,某些不太懂得朋友可能会发现CURL也获取不到,其实是你没配置对 有一个属 ...

  7. Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理

    Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录

  8. 使用request.get获取网页源码

    使用request.get获取网页源码 request.get(url,headers),参数分别为网址和headers import requestsheaders = {'User-Agent': ...

  9. C# -爬虫之WebBrowser跨域跨iframe获取网页源码

    前言:这里关键写用WebBrowser跨域跨iframe获取网页源码的部分,本意是要爬取全职高手的有声小说,这类网站特殊,网页上广告大堆,爬起来真麻烦,比如我爬取的网站的mp3源文件下载还需要秘钥的, ...

最新文章

  1. git 基于发布分支的开发
  2. Java数据库连接池实现原理
  3. C++编译报错:重复定义
  4. 日期和毫秒值 例子
  5. CCF201312-1 出现次数最多的数
  6. 硬盘安装linux_Surface-Laptop3 安装Archlinux折腾小记
  7. LoadRunner录制第一个脚本Virtual User Generator
  8. Atitti 编程语言高级 api 与高级知识 堆栈api 异常api Meta anno注解元数据api Ref 反射api Database meta api 字节码库如果你正在编写一个框架或者
  9. 基于springboot+vue课程管理系统源码+数据库sql+文档(完美运行,包含数据库源代码,可远程调试)
  10. 经典C语言编程100例——题目+答案代码(1-10)
  11. 学生考勤及行为管理系统_学生考勤信息管理系统.doc
  12. 用XDOC制作Flash出国签证
  13. 特征多项式法(characteristic polynomial )求特征值(结合lanczos和householder)(python,数值积分)
  14. 人脸识别的原理及技术
  15. Spark中RDD的sortBy排序的5种实现方法
  16. 建立自己的机械臂–编程
  17. 如何在IDEA中创建Web项目
  18. 台式计算机内存卡与普通有啥区别,电脑硬盘和内存有什么区别?
  19. 扬帆际海教育:跨境电商需要了解的主流社媒平台
  20. CF1611E1 Escape The Maze (easy version)+ CF1611E2 Escape The Maze (hard version)

热门文章

  1. html table设置行高_html 表格单元格的宽度和高度的设置方法
  2. 专访《王者荣耀》美术总监:用6年研究东方美学
  3. 分享:游戏新手引导程序框架设计3要点
  4. Linux从零开始(二、基础命令(续二)解压 tar)
  5. MySQL5.6 Waiting for Commit Lock
  6. Oracle 数据类型及存储方式
  7. HDU 4325 离散化+树状数组 或者 不使用树状数组
  8. 洛谷 P1309 瑞士轮 解题报告
  9. 稀缺:百分之二的选择
  10. C# WinForm程序退出的方法比较