模拟浏览器操作WinHttp方式和COM组件调用的各种方法

方法一:

1、新建MFC工程时要选上使用套接字连接。

2、MFC工程中》类向导》右上角“添加类”下的“类型库中的MFC类”,如果注册表列表下没有winhttp控件,那就选择从文件位置指定添加,路径一般在c:\windows\system32\winhttp.dll,如果是64位的系统,建议用路径c:\windows\SysWOW64\winhttp.dll下的winhttp.dll控件

 1 void CWinHttpDemoDlg::OnBnClickedBtnGo()
 2 {
 3     //初始化com组件
 4     CoInitialize(nullptr);
 5     //开始使用com组件中的方法
 6     CWinHttpRequest* pHttpRep = new CWinHttpRequest();
 7 
 8     pHttpRep->CreateDispatch(_T("WinHttp.WinHttpRequest.5.1"));
 9     
10     //打开网站
11     COleVariant varFalse = VARIANT_FALSE;
12     //将URL抓换为ip地址、检查url的参数是否正确、新建好get请求指令、
13     pHttpRep->Open(_T("GET"), _T("http://www.baidu.com"), varFalse);
14     //socket、连接、发送、接收
15     pHttpRep->Send(vtMissing);
16 
17     //接收服务器返回的数据
18     CString strBuf = pHttpRep->get_ResponseText();
19     MessageBox(strBuf);
20 
21     delete pHttpRep;
22     CoUninitialize();
23 }

 

方法二:

用打包的方式,就不需要在类向导添加控件。

 1 //方式2,打包dll方式
 2 #import "C:\\Windows\\SysWOW64\\winhttp.dll" no_namespace//没有no_namespace的话后面使用IWinHttpRequest前面要加作用域名,在debug目录下可以看对应生成的名称,com组件常遇到的问题
 3 void CWinHttpDemoDlg::OnBnClickedBtnGo()
 4 {
 5     CoInitialize(nullptr);
 6 
 7     IWinHttpRequest *pHttp = nullptr;
 8     //com组件其实就是windows的组成部分
 9     CoCreateInstance(__uuidof(WinHttpRequest), nullptr, CLSCTX_ALL, __uuidof(IWinHttpRequest), (LPVOID*)&pHttp);
10 
11     pHttp->Open(_T("GET"), _T("http://www.baidu.com"));
12     pHttp->Send();
13 
14     CString strBuf = pHttp->ResponseText;
15     MessageBox(strBuf);
16 
17     pHttp->Release();
18     CoUninitialize();
19 }

 

方法三:智能指针的方式

 1 #import "C:\\Windows\\SysWOW64\\winhttp.dll" no_namespace//没有no_namespace的话后面使用IWinHttpRequest前面要加作用域名,在debug目录下可以看对应生成的名称,com组件常遇到的问题
 2 void CWinHttpDemoDlg::OnBnClickedBtnGo()
 3 {
 4     IWinHttpRequestPtr ptrHttpReq;
 5     ptrHttpReq.CreateInstance(__uuidof(WinHttpRequest));
 6     ptrHttpReq->Open(_T("GET"), _T("http://www.baidu.com"));
 7     ptrHttpReq->Send();
 8     CString strBuf = ptrHttpReq->ResponseText;
 9     MessageBox(strBuf);
10 }

-----------------------

方式三的POST情况:

 1 //方式3,智能指针(就是后面带Ptr)
 2 #import "C:\\Windows\\SysWOW64\\winhttp.dll" no_namespace//没有no_namespace的话后面使用IWinHttpRequest前面要加作用域名,在debug目录下可以看对应生成的名称,com组件常遇到的问题
 3 void CWinHttpDemoDlg::OnBnClickedBtnGo()
 4 {
 5     IWinHttpRequestPtr ptrHttpReq;
 6     ptrHttpReq.CreateInstance(__uuidof(WinHttpRequest));
 7     ptrHttpReq->Open(_T("POST"), _T("http://www.txtpw.com/hui_mima.asp"));
 8     CString strBody = _T("bh:85141\r\nmm:mark123\r\nimageField.y:14");
 9     COleVariant varBody = strBody;
10     ptrHttpReq->Send(varBody);
11     //CString strBuf = ptrHttpReq->ResponseText;//直接获取中文会乱码
12     _variant_t varReqBody = ptrHttpReq->ResponseBody;
13     size_t len = varReqBody.parray->rgsabound[0].cElements;
14     char* pBuf = (char*)(varReqBody.parray->pvData);
15     //MessageBox(strBuf);
16 }

 

转载于:https://www.cnblogs.com/djetcgw/p/4891845.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值