方法一:

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 }

 

posted on 2015-10-19 14:26  俗剑仙·情如梦  阅读(1367)  评论(0编辑  收藏  举报