#define WIN32_MEAN_AND_LEAN #include #include #include #include using namespace std; int main( void ) { HINTERNET session = WinHttpOpen( L"WinHTTP crawler/0.0.1", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0 ); if( !session ) { cerr << "WinHttpOpen failed: " << GetLastError( ) << endl; return 1; } HINTERNET connect = WinHttpConnect( session, L"www.andreasbaumann.cc", INTERNET_DEFAULT_HTTP_PORT, 0 ); if( !connect ) { cerr << "WinHttpConnect failed: " << GetLastError( ) << endl; WinHttpCloseHandle( session ); return 1; } HINTERNET request = WinHttpOpenRequest( connect, L"GET", L"/index.shtml", NULL, WINHTTP_NO_REFERER, NULL, NULL ); if( !request ) { cerr << "WinHttpOpenRequest failed: " << GetLastError( ) << endl; WinHttpCloseHandle( request ); WinHttpCloseHandle( session ); return 1; } if( !WinHttpSendRequest( request, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0 ) ) { cerr << "WinHttpSendRequest failed: " << GetLastError( ) << endl; WinHttpCloseHandle( connect ); WinHttpCloseHandle( request ); WinHttpCloseHandle( session ); return 1; } if( !WinHttpReceiveResponse( request, NULL ) ) { cerr << "WinHttpReceiveResponse failed: " << GetLastError( ) << endl; WinHttpCloseHandle( connect ); WinHttpCloseHandle( request ); WinHttpCloseHandle( session ); return 1; } DWORD size; string content; size_t pos = 0; do { size = 0; if( !WinHttpQueryDataAvailable( request, &size ) ) { cerr << "WinHttpQueryDataAvailable failed: " << GetLastError( ) << endl; WinHttpCloseHandle( connect ); WinHttpCloseHandle( request ); WinHttpCloseHandle( session ); return 1; } LPSTR buf = new char[size+1]; if( !buf ) { cerr << "Out of memory allocating receive buffer" << endl; WinHttpCloseHandle( connect ); WinHttpCloseHandle( request ); WinHttpCloseHandle( session ); return 1; } ZeroMemory( buf, size+1 ); DWORD received; if( !WinHttpReadData( request, (LPVOID)buf, size, &received ) ) { cerr << "WinHttpReadData failed: " << GetLastError( ) << endl; WinHttpCloseHandle( connect ); WinHttpCloseHandle( request ); WinHttpCloseHandle( session ); return 1; } content.insert( pos, buf, received ); pos += received; delete buf; } while( size > 0 ); cout << "Received bytes: " << content.size( ) << endl; cout << content << endl; WinHttpCloseHandle( request ); WinHttpCloseHandle( connect ); WinHttpCloseHandle( session ); return 0; }