2012年7月5日星期四

IWinHttpRequest.Cpp


//本文改编自msdn:http://msdn.microsoft.com/en-us/library/aa384045(VS.85).aspx
//#include <windows.h>
//#include <stdio.h>
//#include <objbase.h>

#include "httprequest_h.h"
/*关于这个文件有三种实现的办法:
1。网上搜索相应的文件,http://www.koders.com上面有。
2。导入相应的dll,如:#import <winhttp.dll>
3。编译相应的idl文件。先导入idl,编译,再导入.h文件。
*/

//#pragma comment(lib, "ole32.lib")
//#pragma comment(lib, "oleaut32.lib")

const IID IID_IWinHttpRequest ={0x06f29373,0x5c5a,0x4b54,{0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}};

int main()
{
    HRESULT   hr = CoInitialize( NULL );  

    CLSID           clsid;
    hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1",&clsid);

    IWinHttpRequest *  pIWinHttpRequest = NULL;
    hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,IID_IWinHttpRequest,(void **)&pIWinHttpRequest);
   
    VARIANT         varFalse;//初始化变量供下面使用。否则出错。
    VariantInit(&varFalse);
    V_VT(&varFalse)   = VT_BOOL;
    V_BOOL(&varFalse) = VARIANT_FALSE;

    BSTR bstrMethod  = SysAllocString(L"GET");
    BSTR bstrUrl = SysAllocString(L"http://microsoft.com");
    hr = pIWinHttpRequest->Open(bstrMethod,bstrUrl,varFalse);// Open WinHttpRequest.
    //SysFreeString(bstrMethod);//释放
    //SysFreeString(bstrUrl);//释放
   
    VARIANT         varEmpty;//初始化变量供下面使用。否则出错。
    VariantInit(&varEmpty);
    V_VT(&varEmpty) = VT_ERROR;

    hr = pIWinHttpRequest->Send(varEmpty);// Send Request.//这个很费时间.
 
    BSTR            bstrResponse = NULL;
    hr = pIWinHttpRequest->get_ResponseText(&bstrResponse); // Get Response text.
   
    wprintf(L"%.256s",bstrResponse);// Print the response to a console.
   
    //if (pIWinHttpRequest)        pIWinHttpRequest->Release();// Release memory.
    //if (bstrResponse)        SysFreeString(bstrResponse);

    CoUninitialize();
    return 0;
}
//made at 2012.04.16

‘vbs代码如下:
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
WinHttpReq.open "get","http://correy.webs.com",false
WinHttpReq.Send
WScript.Echo WinHttpReq.ResponseText
'还有PUT,post功能,暂未加上。

没有评论:

发表评论