vc++获取网页源码

使用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

打开对应的注册表:

调试结果:

时间: 2024-12-26 07:21:48

vc++获取网页源码的相关文章

POST教程笔记 - WinHttp获取网页源码

①.WinINet与WinHttp的异同点,为什么使用WinHttp讲解? 详情见:<WinINet与WinHttp总结>文档,已经打包给大家了. ②.WinHttp接口调用方式:微软官方地址:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspxWinHttp微软提供了两种调用方式:C++调用API的版本.COM组件的版本.这里面使用的是 C++ Interface 接口的组件的方式来给大家讲解. ③.WinHttp常用命令讲解:详情

IXMLHTTPRequest获取网页源码的心得

在万一老师的博客看到一种利用IXMLHTTPRequest来获取网页源码的方法,但有2个问题没解决,自己研究了下改进了方法. 1.如果网页进行301转跳将无法获取源码 2.如果网站是gb2312编码将获取的是乱码 /////以下方法使用的是Delphi xe2编写 uses MsXML,activex; function GETHTML (const URL : string):string; // XMLHTTP接口Var XMLHTTP:IServerXMLHTTPRequest; HTML

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

偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义就不多说了,不知道的请自行点击查看 =>百度百科 网络爬虫,维基百科 网络爬虫 有很多编程语言都可以编写网络爬虫,只不过各有各的优缺点,这里我选择用Python语言编写爬虫,因为Python是一门非常适合用来编写爬虫的语言,用它实现爬虫的代码量相对其他语言要少很多,并且python语言对网络编程这类模块

Delphi XE下获取网页源码记录

存放个自己写的获取网页源码,掌握了: 1.利用CreateOLEObject方式获取源码 2.自动判断网页格式编码 需要使用到的单元:Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils 需要创建结构体:TResultWebHtml (用于存放返回的源码和Cookies) Uses Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils; type TResultWebHtml = record

C++ 获取网页源码码的操作

#include <stdio.h>#include <windows.h>#include <wininet.h>#pragma comment(lib,"Wininet.lib")#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ vector<TCHAR> v; TCHAR szUrl[] = _T("http:/

asp.net C# 获取网页源码的几种方式

1 方法 System.Net.WebClient aWebClient = new System.Net.WebClient(); aWebClient.Encoding = System.Text.Encoding.Default; Byte[] pageData = aWebClient.DownloadData(url); string nhtml = Encoding.GetEncoding("utf-8").GetString(pageData); 2方法 System.N

delphi webbrowser 获取网页源码

转自 http://hi.baidu.com/delphidiary 转自 http://blog.sina.com.cn/s/blog_725fb194010150jh.html //前面要加几个pas单元uses Registry,ShellApi, WinInet,ShlObj,ComObj;//========================================删COOKIES========================== procedure DelRegCache;

按键精灵 vbs 获取网页源码 xp系统被拒绝

如下面的代码所示,获取新浪博客某个指定网页的源码 verurl = "http://blog.sina.com.cn/s/blog_9ea1db7b0101o7ch.html?" & now() Set Http = CreateObject("Microsoft.XMLHTTP") Http.open "get", verurl, False Http.send Delay 50 vbody = Http.responsebody Tr

iOS项目开发实战——使用同步请求获取网页源码

网络请求一般分为同步请求和异步请求,同步请求假设訪问时间过长,会造成界面卡死状态,用户体验不是非常好.可是请求速度较快的话,也能够考虑使用同步訪问.如今先来学习同步訪问. (1)在viewDidLoad()方法中实现例如以下代码: override func viewDidLoad() { super.viewDidLoad() var data = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: "h