Files
Work/wininet/HTTPConnection.cpp
2024-08-07 09:16:27 -04:00

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;
}