POST教程笔记 - WinHttp获取网页源码
生活随笔
收集整理的這篇文章主要介紹了
POST教程笔记 - WinHttp获取网页源码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
①、WinINet與WinHttp的異同點,為什么使用WinHttp講解?
詳情見:《WinINet與WinHttp總結》文檔,已經打包給大家了。
②、WinHttp接口調用方式:
微軟官方地址:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspx
WinHttp微軟提供了兩種調用方式:C++調用API的版本、COM組件的版本。這里面使用的是 C++ Interface 接口的組件的方式來給大家講解。
③、WinHttp常用命令講解:
詳情見:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspx
/*②、使用WinHttp3種方法的優缺點 1、類型庫生成包裝類的方式:優點->使用方便,貼近C++,缺點->COM接口的默認缺省參數必須填寫,不靈活; 2、import+接口方式:優點->COM接口的申請與釋放自己控制,很靈活,缺點->控制不好,引起內存泄露,且COM組件的實例化參數較多; 3、import+智能指針包裝類的方式:優點->智能指針,使用方便,不用擔心內存泄露,COM組件實例化簡單,可使用COM組件的默認缺省參數;*/
?
下面給出三種方法的使用示例:
方法1:
// 方法1 類型庫生成包裝類的方式:優點->使用方便,貼近C++,缺點->COM接口的默認缺省參數必須填寫,不靈活; void CHttpTestDlg::OnBnClickedButton1() {CoInitialize(NULL);CWinHttpRequest* pWinHttp = new CWinHttpRequest;BOOL bRet = pWinHttp->CreateDispatch(L"WinHttp.WinHttpRequest.5.1");if (!bRet) return;// CLSID clsid = { 0 }; // CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid); // pWinHttp->CreateDispatch(clsid); COleVariant async = VARIANT_FALSE;pWinHttp->Open(L"GET", L"http://www.baidu.com", async);pWinHttp->Send(vtMissing);CString strSrc = pWinHttp->get_ResponseText();MessageBox(strSrc);pWinHttp->ReleaseDispatch();delete pWinHttp;CoUninitialize(); }// 以上,CWinHttpRequest是類型庫生成包裝類
方法2:
#import "C:\\windows\\SysWOW64\\winhttp.dll" no_namespace // 方法2 void CHttpTestDlg::OnBnClickedButton2() {BSTR bstrBody;CString strBody;CoInitialize(NULL);IWinHttpRequest* pHttpReq = NULL;HRESULT hr = \CoCreateInstance(__uuidof(WinHttpRequest),nullptr,CLSCTX_ALL,__uuidof(IWinHttpRequest),(PVOID*)&pHttpReq);if (FAILED(hr)){goto _exit0;}hr = pHttpReq->Open(L"GET", L"http://www.baidu.com");if (FAILED(hr)){goto _exit1;}hr = pHttpReq->Send();if (FAILED(hr)) {goto _exit1;}hr = pHttpReq->get_ResponseText(&bstrBody); // <=> _bstr_t bStrRsp = pHttpReq->ResponseText;if (FAILED(hr)) {goto _exit1;}strBody = bstrBody;MessageBox(strBody);_exit1:pHttpReq->Release();_exit0:CoUninitialize(); }方法3:
#import "C:\\windows\\SysWOW64\\winhttp.dll" no_namespace // 方法3 void CHttpTestDlg::OnBnClickedButton3() {BSTR bstrBody;CString strBody;CoInitialize(NULL);IWinHttpRequestPtr pHttpReq = NULL;HRESULT hr = pHttpReq.CreateInstance(__uuidof(WinHttpRequest));if (FAILED(hr)){goto _exit0;}hr = pHttpReq->Open(L"GET", L"http://www.baidu.com");if (FAILED(hr)) {goto _exit0;}hr = pHttpReq->Send();if (FAILED(hr)) {goto _exit0;}pHttpReq->get_ResponseText(&bstrBody);strBody = bstrBody;MessageBox(strBody);_exit0:CoUninitialize(); }?
轉載于:https://www.cnblogs.com/Lthis/p/4926410.html
總結
以上是生活随笔為你收集整理的POST教程笔记 - WinHttp获取网页源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp 第二节
- 下一篇: 典型用户故事