Listing 1
#include <iostream> #include <tchar.h> #include "Windows.h" #include "WinInet.h" using namespace std; void BuildSoapRequest(TCHAR* pszSoap) { _tcscpy(pszSoap, _T("<?xml version=\"1.0\" encoding=\"") ); _tcscat(pszSoap, _T("utf-8\" ?>") ); _tcscat(pszSoap, _T("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">") ); _tcscat(pszSoap, _T("<soap:Header>") ); _tcscat(pszSoap, _T("</soap:Header>") ); _tcscat(pszSoap, _T("<soap:Body>") ); _tcscat(pszSoap, _T("<GetVersionInfo xmlns=\ "http://s.mappoint.net/mappoint-30/\">") ); _tcscat(pszSoap, _T("</GetVersionInfo>") ); _tcscat(pszSoap, _T("</soap:Body>") ); _tcscat(pszSoap, _T("</soap:Envelope>") ); } int _tmain(int argc, _TCHAR* argv[]) { LPTSTR AcceptTypes[2] = {TEXT("text/xml"), NULL}; DWORD dwFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_KEEP_CONNECTION; HINTERNET hNet = InternetOpen("SpikeApp", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (hNet) { wcout << L"Opened Internet connection and got valid handle" << endl; HINTERNET hSession = InternetConnect(hNet, _T("findv3.staging.mappoint.net"), INTERNET_DEFAULT_HTTP_PORT, _T("<username>"), _T("<password>"), INTERNET_SERVICE_HTTP, 0, 0); if (hSession) { wcout << L"Opened session for WS and got valid handle" << endl; HINTERNET hRequest = HttpOpenRequest(hSession, _T("POST"), _T("/Find-30/Common.asmx"), HTTP_VERSION, NULL, (LPCTSTR*)AcceptTypes, dwFlags, 0); if (hRequest) { wcout << L"Opened Request for WS & got valid handle" << endl; TCHAR szSoapAction[256]; _tcscpy( szSoapAction, _T("Content-Type: text/xml; charset=utf-8\n") ); _tcscat( szSoapAction, _T("SOAPAction: \"") ); _tcscat( szSoapAction, _T ("http://s.mappoint.net/mappoint-30/GetVersionInfo") ); _tcscat( szSoapAction , _T("\"\0") ); TCHAR szSoap[512]; BuildSoapRequest(szSoap); BOOL bSent = HttpSendRequest(hRequest, szSoapAction, _tcslen(szSoapAction), szSoap, _tcslen(szSoap) ); if ( bSent ) { CHAR* lpBufferA = new CHAR[32000]; DWORD dwcBuffer; if (!InternetReadFile (hRequest, (LPVOID)lpBufferA, 32000, &dwcBuffer)) { wcout << L"Failed to read response" << endl; } else{ CHAR* szResponse = new CHAR[dwcBuffer + 1]; strncpy(szResponse,lpBufferA, dwcBuffer); wcout << L"Response" << endl << szResponse << endl; delete [] szResponse; } delete [] lpBufferA; } else{ DWORD dwErr = GetLastError(); wcout << L"Send Request Failed. Error:" << dwErr << endl; } InternetCloseHandle(hRequest); } InternetCloseHandle(hSession); } InternetCloseHandle(hNet); } return 0; }