2012-04-11 5 views
2

XML 형식의 데이터를 반환하는 URI = http : //localhost/IO_100_Service.svc/xml? id = {id}가있는 더미 웹 서비스가 있음 WINInet을 사용하여이 서비스를 호출하려고합니다. VC++에서 APi. 누군가가이 서비스를 호출하기 위해 헤더와 데이터를 추가하기 위해 "HttpSendRequest"메소드를 사용하는 방법을 알려줄 수 있습니까?WININET의 HttpSendRequest 메서드를 작성하는 방법

답변

10

다음은 필요에 맞게 수정할 수있는 샘플 코드입니다. 명령 줄 템플릿 프로젝트를 사용하여 VS2005를 테스트했습니다.

#include <tchar.h> 
    #include <wininet.h> 

    /// .... 

    HINTERNET hIntSession = 
     ::InternetOpen(_T("MyApp"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); 

    HINTERNET hHttpSession = 
     InternetConnect(hIntSession, _T("api.twitter.com"), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL); 

    HINTERNET hHttpRequest = HttpOpenRequest(
     hHttpSession, 
     _T("GET"), 
     _T("1/statuses/user_timeline.xml?screen_name=twitterapi"), 
     0, 0, 0, INTERNET_FLAG_RELOAD, 0); 

    TCHAR* szHeaders = _T("Content-Type: text/html\nMySpecialHeder: whatever"); 
    CHAR szReq[1024] = ""; 
    if(!HttpSendRequest(hHttpRequest, szHeaders, _tcslen(szHeaders), szReq, strlen(szReq))) { 
     DWORD dwErr = GetLastError(); 
     /// handle error 
    } 

    CHAR szBuffer[1025]; 
    DWORD dwRead=0; 
    while(::InternetReadFile(hHttpRequest, szBuffer, sizeof(szBuffer)-1, &dwRead) && dwRead) { 
     szBuffer[dwRead] = 0; 
     OutputDebugStringA(szBuffer); 
     dwRead=0; 
    } 

    ::InternetCloseHandle(hHttpRequest); 
    ::InternetCloseHandle(hHttpSession); 
    ::InternetCloseHandle(hIntSession); 
관련 문제