64 lines
2.2 KiB
C++
64 lines
2.2 KiB
C++
#include <wininet/HTTPConnection.hpp>
|
|
|
|
bool HTTPConnection::get(const String &action,HTTPHeader &httpHeader,HTTPData &httpData)
|
|
{
|
|
DWORD dwSize(0);
|
|
String strHeaders;
|
|
|
|
LPSTR accessTypes[2]={"*/*",0};
|
|
if(!isOkay())return false;
|
|
mhRequest=::HttpOpenRequest(getHANDLE(),"GET",action.str(),HTTP_VERSION,0,(const char**)&accessTypes,INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,0);
|
|
if(!mhRequest)return false;
|
|
if(!::HttpSendRequest(mhRequest,0,0,0,0))return false;
|
|
::HttpQueryInfo(mhRequest,HTTP_QUERY_RAW_HEADERS_CRLF,0,&dwSize,0);
|
|
if(!dwSize)return false;
|
|
strHeaders.reserve(dwSize+1);
|
|
::HttpQueryInfo(mhRequest,HTTP_QUERY_RAW_HEADERS_CRLF,strHeaders,&dwSize,0);
|
|
httpHeader=strHeaders;
|
|
if(httpHeader.isErrorResponse())return false;
|
|
httpData.size(httpHeader.getContentLength());
|
|
if(!httpData.size())httpData.size(32768);
|
|
dwSize=0;
|
|
::InternetReadFile(mhRequest,&httpData[0],httpData.size(),&dwSize);
|
|
if(dwSize<httpData.size())
|
|
{
|
|
HTTPData tmpData;
|
|
tmpData.size(dwSize);
|
|
for(int index=0;index<dwSize;index++)tmpData[index]=httpData[index];
|
|
httpData=tmpData;
|
|
}
|
|
closeRequest();
|
|
return true;
|
|
}
|
|
|
|
bool HTTPConnection::post(const String &action,HTTPHeader &httpHeader,HTTPData &httpData)
|
|
{
|
|
DWORD dwSize(0);
|
|
String strHeader;
|
|
String strHeaders;
|
|
|
|
LPSTR accept[2]={"Accept: */*",0};
|
|
if(!isOkay())return false;
|
|
mhRequest=::HttpOpenRequest(getHANDLE(),"GET",action.str(),HTTP_VERSION,0,(const char**)&accept,0,1);
|
|
if(!mhRequest)return false;
|
|
strHeader=httpHeader.serialize();
|
|
if(!::HttpSendRequest(mhRequest,strHeader.str(),strHeader.length(),&httpData[0],httpData.size()))return false;
|
|
::HttpQueryInfo(mhRequest,HTTP_QUERY_RAW_HEADERS_CRLF,0,&dwSize,0);
|
|
if(!dwSize)return false;
|
|
strHeaders.reserve(dwSize+1);
|
|
::HttpQueryInfo(mhRequest,HTTP_QUERY_RAW_HEADERS_CRLF,strHeaders,&dwSize,0);
|
|
httpHeader=strHeaders;
|
|
httpData.size(httpHeader.getContentLength());
|
|
if(!httpData.size())httpData.size(32768);
|
|
::InternetReadFile(mhRequest,&httpData[0],httpData.size(),&dwSize);
|
|
if(dwSize<httpData.size())
|
|
{
|
|
HTTPData tmpData;
|
|
tmpData.size(dwSize);
|
|
for(int index=0;index<dwSize;index++)tmpData[index]=httpData[index];
|
|
httpData=tmpData;
|
|
}
|
|
closeRequest();
|
|
return true;
|
|
}
|