从零开始学编程

 找回密码
 立即注册

QQ登录

只需一步,快速开始

界面工厂编程视频教程广告联系qq1031180668广告位
查看: 886|回复: 3

#import+智能指针winhttp COM组件获取网页源码

[复制链接]
  • ta_mind

    2016-10-1 18:52
  • classn_01: 64 classn_02

    [LV.6]常住居民II

    790

    主题

    1497

    帖子

    2652

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    2652

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2016-1-16 16:50:20 | 显示全部楼层 |阅读模式
    使用#import+智能指针的方式调用COM组件,首先就是用#import导入winhttp ,这个和用接口方式一样:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    #import "C://Windows//System32//winhttp.dll" no_namespace

    这里#import "C://Windows//System32//winhttp.dll" 后面的no_namespace 的作用和 using namespace Winhttp作用是一样的,
    把命名空间设置为全局。
    剩下的还是老办法:
    剩下的还是老办法:
    1.COM组件初始化
    2.定义winhttp对象指针
    3.创建并实例化winhttp组件

    4.调用winhhtp的Open方法打开连接
    5.调用Send方法发送请求
    6.获取ResponseText返回的文本

    7.释放Winhttp组件对象
    8.释放Winhttp对象指针
    9.卸载COM组件
    由于前面两节已经讲的差不多了,只是换种调用方法,这里就简单的带过。。。
    COM组件初始化:
    [size=14.2857151031494px]
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    CoInitialize(0);




    定义winhttp对象指针
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    IWinHttpRequestPtr  pHttpRequst = NULL;

    IWinHttpRequestPtr ,比IWinHttpRequest多了个Ptr, 也就是只能指针了,pHttpRequst就不用加*了。






    创建并实例化winhttp组件
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    HRESULT  hr=pHttpRequst.CreateInstance(__uuidof(WinHttpRequest));

    HRESULT 函数返回值,可以用FAILED验证是否返回失败,FAILED(hr)=true代表失败。
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    if (FAILED(hr))
            {
                    MessageBox(_T("实例化失败")); return;
            }

    调用winhhtp的Open方法打开连接:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    pHttpRequst->Open(_T("Get"),_T("http://www.c0ks.com"));

    这时候用智能指针的好处就体现出来了,一些可以默认省略的参数都可以省略,不会爆错,
    pHttpRequst->Open,这里大家可能会有疑问,pHttpRequst已经是智能指针了,直接用
    pHttpRequst.Open不就行了?pHttpRequst是智能指针不错,但是它是一个智能指针包装类
    ,并不是直接指向的winhttp,所以pHttpRequst.的构造函数里并没有winhttp的这些方法,要用
    pHttpRequst->才能指向winhttp。


    调用Send方法发送请求:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    pHttpRequst->Send();

    很简单,省略默认参数不多说。

    获取ResponseText返回的文本:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    CString str= pHttpRequst->ResponseText;



    释放Winhttp组件对象:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    pHttpRequst.Release();


    释放Winhttp对象指针:
    智能指针,自动释放,暂时不用劳烦我们了
    卸载COM组件
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    CoUninitialize();

    结束。后面的教程中讲用这种智能指针的方法,,不要问为什吗,,省事,简单。
    下节,抓包工具的使用。






    上一篇:#import+接口方式调用winhttp COM组件
    下一篇:使用IE11自带的f12开发者工具抓包
    不积跬步,无以至千里
  • ta_mind

    2016-5-16 12:07
  • classn_01: 28 classn_02

    [LV.4]偶尔看看III

    15

    主题

    82

    帖子

    164

    积分

    注册会员

    Rank: 2

    积分
    164
    发表于 2016-4-23 00:00:03 | 显示全部楼层
    一段神奇的代码
  • ta_mind
    难过
    2016-6-5 02:35
  • classn_01: 4 classn_02

    [LV.2]偶尔看看I

    39

    主题

    251

    帖子

    308

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    308
    发表于 2016-5-30 09:06:05 | 显示全部楼层
    C++太博大精深了
  • ta_mind
    开心
    2016-8-11 13:08
  • classn_01: 4 classn_02

    [LV.2]偶尔看看I

    1

    主题

    12

    帖子

    44

    积分

    新手上路

    Rank: 1

    积分
    44
    发表于 2016-7-23 21:57:59 | 显示全部楼层
    讲解的非常简介易懂,学习了
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Archiver|小黑屋|sitemap|从零开始学编程 ( 豫ICP备15032706号-2 )

    GMT+8, 2017-5-24 23:42 , Processed in 0.078125 second(s), 35 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表