![]() |
General Programming »
Internet / Network »
HTTP / HTTPS
Intermediate
Simple HTTP Client using WININETBy Yongseon HeoSimple HTTP Client, HTTP GET, HTTP POST, HTTP POST-MultiPartFormData |
VC6Win2K, Visual-Studio, MFC, STL, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
This class is used for HTTP REQUEST. It supports HTTP GET, HTTP POST and HTTP POST-MultiPartFormData.
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 DATARequestOfURI(...) 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.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 that you have been reading my article and my bad English. ;p
General
News
Question
Answer
Joke
Rant
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 |