1.使用IWinHttpRequest获取网页源码

首先要创建基于对话框的mfc应用程序

2.import+接口方式

首先导入winhttp.dll,使用IWinHttpRequest接口

#import "C:\\Windows\\System32\\winhttp.dll"

void CHttpTestDlg::OnBnClickedButton1()
{
::CoInitialize(NULL); // 初始化com组件
IWinHttpRequest *pHttpReq = NULL; }

编译会出现如下错误:

在项目的Debug目录下,生成两个文件:winhttp.tlh和winhttp.tli

查看winhttp.tlh

解决方法:

1)使用命名空间WinHttp

,

2)在导入动态库的时候不要引入命名空间

代码:

#import "C:\\Windows\\System32\\winhttp.dll" no_namespace

// IID for IWinHttpRequest
const IID IID_IWinHttpRequest =
{
0x06f29373,
0x5c5a,
0x4b54,
{ 0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e }
}; void CHttpTestDlg::OnBnClickedButton1()
{
HRESULT hr = NULL;
hr = CoInitialize(NULL);
IWinHttpRequest *pHttpReq = NULL; CLSID clsid;
hr = CLSIDFromProgID(_T("WinHttp.WinHttpRequest.5.1"), &clsid);
IID iid = __uuidof(IWinHttpRequest);
CLSID tclsid = __uuidof(WinHttpRequest);
hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IWinHttpRequest, (LPVOID*)&pHttpReq);
//hr = CoCreateInstance(__uuidof(WinHttpRequest), NULL, CLSCTX_INPROC_SERVER, __uuidof(IWinHttpRequest), (LPVOID*)&pHttpReq); if (FAILED(hr))
{
CoUninitialize();
return;
} hr = pHttpReq->Open(_T("GET"), _T("http://www.baidu.com")); //缺省值为vtMissing
if (FAILED(hr))
{
pHttpReq->Release();
CoUninitialize();
return;
} hr = pHttpReq->Send(); // 缺省值为vtMissing
if (FAILED(hr))
{
pHttpReq->Release();
CoUninitialize();
return;
} CString respStr = pHttpReq->ResponseText;
MessageBox(respStr); pHttpReq->Release();
CoUninitialize();
}

备注:

1、只要是已经注册了的组件就可以在注册表中查到其GUID,比如我现在查询下IWinHttpRequest接口的IID,用RegWorkshop这个工具就能快速搜索到。

2、这么多的ID确实不好记,简便方法就是使用__uuidof()

__uuidof 关键字用来获得表达式的GUID。这个表达式可以是一种类型名称、一个指针、引用或者一个类型的数组、一个有这个类型实例化的模板或者这种类型的变量。

只要编译器能使用该参数获得相关的GUID,那么该参数就是有效的。这个参数的特殊情况就是它取0或NULL的时候。在这种情况下,__uuidof会返回一个由0组成的GUID

OLE/COM软件的使用:

下载OleViewer(我使用的是v10.0)

右击oleview.exe,以管理员身份运行

选择菜单"File"->"View typelib" , 打开对应的文件

使用RegWorkshop获取已注册com组件的GUID:

以IWinHttpRequest,打开RegWorkShop,搜索IWinHttpRequest

打开对应的注册表:

调试结果:

vc++获取网页源码之使用import+接口方式的更多相关文章

  1. vc++获取网页源码之使用import+智能指针包装类

    创建基于对话框的mfc应用程序 使用智能指针包装类IWinHttpRequestptr,它内部采用的是引用计数来管理对象的生命周期 代码: #import "C:\\Windows\\Sys ...

  2. vc++获取网页源码

    1. 获取网页源码的步骤: com组件的初始化 创建WinHttpRequest对象 创建并实例化WinHttpRequest组件 调用Open方法打开连接 调用Send方法发送请求 使用Respon ...

  3. vc++获取网页源码之使用类型库(TypeLib)生成包装类

    1.在MFC项目名称上 右击->添加->选择Visual C++下的MFC->TypeLib中的MFC类->添加 可以从注册表表中共或是文件中根据相应的接口生成对应的包装类 效 ...

  4. Python爬虫学习之获取网页源码

    偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义 ...

  5. Python3 Selenium WebDriver网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    Python3 Selenium WebDriver网页的前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 通过selenium webdr ...

  6. Python3.x获取网页源码

    Python3.x获取网页源码 1,获取网页的头部信息以确定网页的编码方式: import urllib.request res = urllib.request.urlopen('http://ww ...

  7. Selenium WebDriver-网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    通过selenium webdriver操作网页前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 from selenium import ...

  8. [Xcode 实际操作]八、网络与多线程-(9)使用异步Get方式获取网页源码

    目录:[Swift]Xcode实际操作 本文将演示如何通过Get请求方式,异步获取网页源码. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开视图控制器的代码文 ...

  9. C语言之socket获取网页源码

    写爬虫也许你用的是python,类似urlopen(url).read()即可获得普通的网页的源码,或者用的java的网络库加上流操作,或者其他高级语言.但你有没有想过使用C语言来实现呢?我曾经以为用 ...

随机推荐

  1. jQ常用选择器

    #id:    $('#div'); //查找id='div'; .class: $('.myclass'); //查找class='myclass';​ element:用于搜索的元素,指向DOM节 ...

  2. 关于js的面相对象

    http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html

  3. Blender 画正四面体

    正四面体打开“添加网格”菜单(Shift + A),然后选择“锥形”.将“顶点数”设置为3,将“半径1”保留为默认值1.000,将“半径2”设置为0.000.现在,将深度设置为 {根号2,约等于1.4 ...

  4. How should I store JSON in redis?

    var redis = require("redis"); var client = redis.createClient(); js = { "like":& ...

  5. Go Example--闭包

    package main import "fmt" func main() { //这里需要将闭包函数当作一个类理解,这里是实例化 nextInt := intSeq() fmt. ...

  6. react-redux 的使用

    1 安装react-redux: npm install --save react-redux 2.之前使用redux的store.subscribe监听 store的状态改变,通过store.get ...

  7. linux运维注意事项

    防火墙和selinux一定要注意 服务器或应用出现错误是一定要查看服务器运行状态是否正确,及其相关运行日志 不管什么时候,能不要特殊字符就不要用特殊字符,避免不必要的错误 在看部署文档的时候一定要认真 ...

  8. 【转载】Win10桌面图标有小箭头怎么去掉?Win10去掉桌面图标小箭头的方法

    以下文章转载至系统之家 网址:http://www.xitongzhijia.net/xtjc/20190104/146560.html Win10桌面图标有小箭头怎么去掉?Win10去掉桌面图标小箭 ...

  9. Laya IDE 快捷键

    Laya IDE 快捷键: ctrl+p 快速打开文件,fb中对应的是ctrl+shift+G ctrl+d 删除一行 ctrl+shift+o打开符号 alt+shift+下箭头 复制一行 alt+ ...

  10. Javascript 中 的 for ... in 和 for ... of 差别

    Javascript 中 的 for ... in 和 for ... of 差别 for ... in 是历史问题,在循环数据时会可以出现奇怪的问题,比如把数据的属性循环出来. for ... of ...