Click here to Skip to main content
6,822,613 members and growing! (17,028 online)
Email Password   helpLost your password?
General Programming » Internet / Network » HTTP / HTTPS     Intermediate

Simple HTTP Client using WININET

By Yongseon Heo

Simple HTTP Client, HTTP GET, HTTP POST, HTTP POST-MultiPartFormData
VC6Win2K, Visual-Studio, MFC, STL, Dev
Posted:23 Mar 2003
Updated:2 Sep 2003
Views:244,951
Bookmarked:93 times
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
39 votes for this article.
Popularity: 5.83 Rating: 3.66 out of 5
8 votes, 21.1%
1
3 votes, 7.9%
2
1 vote, 2.6%
3
7 votes, 18.4%
4
19 votes, 50.0%
5

Introduction

This class is used for HTTP REQUEST. It supports HTTP GET, HTTP POST and HTTP POST-MultiPartFormData.

Class Overview

class GenericHTTPClient {
public:                    
    ...
    // CONSTRUCTOR & DESTRUCTOR

    GenericHTTPClient();
    virtual ~GenericHTTPClient();

    ...
    // Connection handler    

    BOOL Connect(    LPCTSTR szAddress,
            LPCTSTR szAgent = __DEFAULT_AGENT_NAME,
            unsigned short nPort = INTERNET_DEFAULT_HTTP_PORT,
            LPCTSTR szUserAccount = NULL,
            LPCTSTR szPassword = NULL);

    BOOL Close();
    VOID InitilizePostArguments();

    // HTTP Arguments handler    

    VOID AddPostArguments(LPCTSTR szName, DWORD nValue);
    VOID AddPostArguments(LPCTSTR szName, LPCTSTR szValue, 
      BOOL bBinary = FALSE);

    // HTTP Method handler 

    BOOL Request(    LPCTSTR szURL,
            int nMethod = GenericHTTPClient::RequestGetMethod,
            LPCTSTR szAgent = __DEFAULT_AGENT_NAME);

    BOOL RequestOfURI(LPCTSTR szURI, int nMethod = 
           GenericHTTPClient::RequestGetMethod);
    BOOL Response(PBYTE pHeaderBuffer, DWORD dwHeaderBufferLength, 
           PBYTE pBuffer, DWORD dwBufferLength, DWORD &dwResultSize);    
    LPCTSTR QueryHTTPResponse();
    LPCTSTR QueryHTTPResponseHeader();    

    // General Handler

    DWORD GetLastError();
    LPCTSTR GetContentType(LPCTSTR szName);
    VOID ParseURL(LPCTSTR szURL, LPTSTR szProtocol, LPTSTR szAddress, 
          DWORD &dwPort, LPTSTR szURI);
    
protected:                
    ...
};
  • Connect(...) method connects to HTTP Server.
  • Close() method closes connection. These are used with RequestOfURI(...).
  • InitilizePostArguments() method initializes post arguments.
  • AddPostArguments(...) method is supported so that you can add new post arguments of the following 3 types ( TCHAR, DWORD, FILE).
  • Request(...) method is for you to attempt request for HTTP REQUEST( GET, POST, POST-MULTIPARTFORMDATA) with URL. HTTP METHOD indirector have 3 types.
    • GenericHTTPClient::GetMethod is HTTP GET REQUEST
    • GenericHTTPClient::PostMethod is HTTP POST REQUEST
    • GenericHTTPClient::PostMultiPartsFormData is HTTP POST REQUEST with BINARY FORM DATA
  • RequestOfURI(...) method is that you could have attempt request for HTTP REQUEST with URI. This method is used with Connect(...) and Close().
  • Response(...) method is that you have HTTP Response by BYTES.
  • QueryHTTPResponse() method is you have receive HTML of your HTTP REQUEST.
  • QueryHTTPResponseHeader() method is you have receive HTTP HEADER about QueryHTTPResponse().
  • GetLastError() method is you get windows error code.
  • GetContentType(...) method is you have get MIME-TYPE.
  • ParseURL(...) method parse URL to protocol(HTTP, HTTPS) and address(or hostname) and port, URI.

Usage

Now, you have to simply do  HTTP GET REQUEST iteration.

....

GenericHTTPClient    httpClient;

if(httpRequest.Request("http://www.codeproject.com")){
    LPCTSTR szHTML=httpRequest.QueryResponse();
}else{
    LPVOID     lpMsgBuffer;
    DWORD dwRet=FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | 
             FORMAT_MESSAGE_FROM_SYSTEM,
             NULL,
             httpRequest.GetLastError(),
             MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
             reinterpret_cast<LPTSTR>(&lpMsgBuffer),
             0,
             NULL);                         

    MessageBox( reinterpret_cast<LPTSTR>(lpMsgBuffer), "ERROR", MB_OK);
    LocalFree(lpMsgBuffer);
}

This is HTTP POST REQUEST with file posting ( HTTP POST Multipart/form-data)

GenericHTTPClient *pClient=new GenericHTTPClient();

    pClient->InitilizePostArguments();
    pClient->AddPostArguments(__TAG_USRID, szUserID);
    pClient->AddPostArguments(__TAG_JUMIN, szSocialIndex);
    pClient->AddPostArguments(__TAG_SRC, szSource);
    pClient->AddPostArguments(__TAG_DST, szDestination);            
    pClient->AddPostArguments(__TAG_FORMAT, szFormat);
    pClient->AddPostArguments(__TAG_SUBJECT, szMessage);

    if(bCharge){
        pClient->AddPostArguments(__TAG_CHARGE, "Y");
    }else{
        pClient->AddPostArguments(__TAG_CHARGE, "N");
    }
    pClient->AddPostArguments(__TAG_CPCODE, szCPCode);
    pClient->AddPostArguments(__TAG_FILE, szFile, TRUE);

    if(pClient->Request(szURL, 
        GenericHTTPClient::RequestPostMethodMultiPartsFormData)){        
        LPCTSTR szResult=pClient->QueryHTTPResponse();
    }else{
#ifdef    _DEBUG
        LPVOID     lpMsgBuffer;
        DWORD dwRet=FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
                      FORMAT_MESSAGE_FROM_SYSTEM,
                      NULL,
                      pClient->GetLastError(),
                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                      reinterpret_cast<LPTSTR>(&lpMsgBuffer),
                      0,
                      NULL);
        OutputDebugString(reinterpret_cast<LPTSTR>(lpMsgBuffer));
        LocalFree(lpMsgBuffer);
#endif
    }

}

Thanks

Thanks that you have been reading my article and my bad English. ;p

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Yongseon Heo


Member
Poke tongue

Occupation: Software Developer
Location: Korea (Republic Of) Korea (Republic Of)

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 160 (Total in Forum: 160) (Refresh)FirstPrevNext
GeneralUnable to compile using VC 2005 PinmemberMichael B Pliam7:34 23 Jun '09  
GeneralRe: Unable to compile using VC 2005 PinmemberMichael B Pliam7:38 23 Jun '09  
GeneralError in Release mode PinmemberMember 332812523:57 4 Jun '09  
GeneralMy vote of 2 PinmemberKarstenK22:01 26 Jan '09  
QuestionHttpOpenRequest GetLastError return 122 Pinmembercaoxin.wh19:00 22 Dec '08  
Generalcan't compile Pinmembergu@z17:05 12 Nov '08  
GeneralAdding headers PinmemberNirav Doshi10:06 29 Jun '08  
AnswerRe: Adding headers [modified] PinmemberNirav Doshi2:49 2 Jul '08  
GeneralRe: Adding headers PinmemberRay Gerami11:09 27 Jul '09  
GeneralReading binary data PinmemberEdyb5:10 27 Jun '08  
GeneralUpload file with size greater that 3MB Pinmemberhishree22:06 24 Jun '08  
QuestionSupport for HTTPS/SSL PinmemberDavidJHubbard6:08 17 Jun '08  
Generalinvalid argument internetclosehandle argument1 hinternet:0x00cc0004 Pinmembermicosun9:11 29 Apr '08  
GeneralWhy does the CheckConnectionExists() function fail when there is clearly an Internet Connection? PinmemberMichael B Pliam18:31 24 Apr '08  
QuestionHelp about Upload the File(How to set the parameter) Pinmemberhishree21:36 16 Mar '08  
GeneralSimple HTTP Client using WININET PinmemberAsia_chenchen6:51 21 Sep '07  
Jokewhat is the usage 0f Response? Pinmembersunwayland18:12 9 Jul '07  
Generalhelp me,how to send this post? Pinmembershellhy1:40 4 Jul '07  
GeneralBytes sent / received Pinmember__TSX__3:02 23 Apr '07  
Generalsuck Pinmember_ppr1:55 10 Dec '06  
QuestionUnhandled exception at 0x7c84b273 in myProject.exe: 0xC0000005: Access violation reading location 0xcccccccc. Pinmemberjuhtzyy21:02 31 Oct '06  
AnswerRe: Unhandled exception at 0x7c84b273 in myProject.exe: 0xC0000005: Access violation reading location 0xcccccccc. PinmemberMichael B Pliam17:16 1 Dec '06  
GeneralRe: Unhandled exception at 0x7c84b273 in myProject.exe: 0xC0000005: Access violation reading location 0xcccccccc. PinmemberEarnol1:03 23 Apr '07  
GeneralRe: Unhandled exception at 0x7c84b273 in myProject.exe: 0xC0000005: Access violation reading location 0xcccccccc. Pinmemberkhanathar7865:37 26 Nov '07  
QuestionA HTTPSendRequest Problem Pinmemberjiangrenkuan22:31 26 Oct '06  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads.

PermaLink | Privacy | Terms of Use
Last Updated: 2 Sep 2003
Editor: Nishant Sivakumar
Copyright 2003 by Yongseon Heo
Everything else Copyright © CodeProject, 1999-2010
Web19 | Advertise on the Code Project