C++关于学习VC驿站 GET 和 POST第三课

 第三课:GET登录的方法

1.获取网页源码的步骤

       1-1:COM组件初始化

       1-2:定义WinHttp组件

       1-3:创建并实例化WinHttp组件

      

       1-4:调用Open方法打开链接

       1-5:调用Send方法发送请求

       1-6:获取ResposeText返回的文本

 

       1-7:释放WinHttp组件对象

       1-8:释放WinHttp对象指针

       1-9:卸载COM组件

 

2.实例化COM组件的几种方法/////////////////推荐用第三种

       1-1:类型库生成包装类的方式:优点->使用方便,贴近C++,缺点->COM接口的默认参数必须填写,不灵活

       1-2:import+接口方式:优点->COM接口的申请与释放自己控制,很灵活,缺点->控制不好,引起内存泄漏,且COM组件的实例化参数较多

       1-3:import+智能指针包装类的方式:优点->智能指针,使用方便,不用担心内存泄漏,COM组件实例化简单,可使用COM组件的默认缺省参数

 

 

3.各种ID的区别:GUID,UUID,CLSID,IID

       在微软的COM中GUID和UUID,CLSID,IID是一个东西,只不过各自代表的意义不同

       UUID:代表COM组件

       CLSID:代表COM组件中的类

       IID:代表COM组件类中的导出接口

 

 

 

 第三课:GET登录的方法1

 

右键项目->添加类/类向导都可以->选择文件和图像中的位置,找到winhttpcom.dll(教程中用的winhttp.dll无法加载,这个一样使用),这里的坑要注意;如果加载其他DLL文件有的需要到CMD中注册,https://zh.wikihow.com/%E6%B3%A8%E5%86%8CDLL?open_ccpa=1 ;网上很多regsvr32 地址,

 
//下方是老师的源码,照抄的 //新建的MFC文件测试情况,还是很好的,数据都反馈回来了,(百度源码,数据源码可能太大,messagebox()函数不显示,通过调试看的反馈源码)

  void button()

       {

              CoInitialize(NULL);

              CWinHttpRequest *pHttpReq=new CWinHttpRequest;

              BOOL bRet=pHttpReq->CreateDispatch(_T("WinHttp.WinHttpRequest.5.1"));

              if(!bRet) return;

             

              //CLSID clsid={0};

              //CLSIDFromProgID(_T("WinHttp.WinHttpRequest.5.1"),&clsid);

              //BOOL bRet=pHttpReq->CreateDispatch(clsid);

             

              COleVariant Async=VARIANT_FALSE;

              pHttpReq->Open(_T("GET"),_T("http://www.baidu.com/"),Async);

              pHttpReq->Send(vtMissing);

              CString strRsp=pHttpReq->get_ResponseText();

              MessageBox(strRsp);

       }

void Ctest1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CoInitialize(NULL);

CWinHttpRequest *pHttpReq = new CWinHttpRequest;
BOOL bRet = pHttpReq->CreateDispatch(_T("WinHttp.WinHttpRequest.5.1"));
if (!bRet) return;

//CLSID clsid={0};
//CLSIDFromProgID(_T("WinHttp.WinHttpRequest.5.1"),&clsid);
//BOOL bRet=pHttpReq->CreateDispatch(clsid);

COleVariant Async = VARIANT_FALSE;
pHttpReq->Open(_T("GET"), _T("http://www.baidu.com/"), Async);
pHttpReq->Send(vtMissing);
CString strRsp = pHttpReq->get_ResponseText();
AfxMessageBox(strRsp);

 

}

 

    

 

 

 

posted on 2022-11-11 22:41  鸟儿听雪  阅读(231)  评论(0)    收藏  举报

导航