Kegan Hollern
Kegan Hollern

Reputation: 11

WinHTTP Error 12029 Cannot Connect

I am trying to make an http connection to my own domain and return a string. I have it working with www.microsoft.com but when i change the domain to www.atomic-gaming.info (my domain) i get an error 12029 and if i change the link to www.yahoo.com i get an error 12017

code

 DWORD dwSize = 0;
 DWORD dwDownloaded = 0;
 LPSTR pszOutBuffer;
 BOOL bResults = FALSE;
 HINTERNET hSession = NULL,  
 hConnect = NULL,
 hRequest = NULL;

 // Use WinHttpOpen to obtain a session handle.
 hSession = WinHttpOpen( L"WinHTTP Example/1.0",  
 WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
 WINHTTP_NO_PROXY_NAME,  
 WINHTTP_NO_PROXY_BYPASS, 0 );
 WinHttpSetOption(hSession, WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS,NULL,NULL);
 // Specify an HTTP server.
 if( hSession )
 hConnect = WinHttpConnect( hSession, L"www.microsoft.com",
 INTERNET_DEFAULT_HTTPS_PORT, 0 );

 // Create an HTTP request handle.
 if( hConnect )
 hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
 NULL, WINHTTP_NO_REFERER,  
 WINHTTP_DEFAULT_ACCEPT_TYPES,  
 WINHTTP_FLAG_SECURE );

 // Send a request.
 if( hRequest )
 bResults = WinHttpSendRequest( hRequest,
 WINHTTP_NO_ADDITIONAL_HEADERS, 0,
 WINHTTP_NO_REQUEST_DATA, 0,  
 0, 0 );


 // End the request.
 if( bResults )
 bResults = WinHttpReceiveResponse( hRequest, NULL );

 // Keep checking for data until there is nothing left.
 if( bResults )
 {
 do  
 {
 // Check for available data.
 dwSize = 0;
 if( !WinHttpQueryDataAvailable( hRequest, &dwSize ) )
 printf( "Error %u in WinHttpQueryDataAvailable.\n",
 GetLastError( ) );

 // Allocate space for the buffer.
 pszOutBuffer = new char[dwSize+1];
 if( !pszOutBuffer )
 {
 printf( "Out of memory\n" );
 dwSize=0;
 }
 else
 {
 // Read the data.
 ZeroMemory( pszOutBuffer, dwSize+1 );

 if( !WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,  
 dwSize, &dwDownloaded ) )
 printf( "Error %u in WinHttpReadData.\n", GetLastError( ) );
 else
 printf( "%s", pszOutBuffer );

 // Free the memory allocated to the buffer.
 delete [] pszOutBuffer;
 }
 } while( dwSize > 0 );
 }


 // Report any errors.
 if( !bResults )
 printf( "Error %d has occurred.\n", GetLastError( ) );

 // Close any open handles.
 if( hRequest ) WinHttpCloseHandle( hRequest );
 if( hConnect ) WinHttpCloseHandle( hConnect );
 if( hSession ) WinHttpCloseHandle( hSession );

can someone give me an idea why this only works with microsoft.com? and how would i go about fixing it?

Upvotes: 0

Views: 22952

Answers (1)

Igor Tandetnik
Igor Tandetnik

Reputation: 52471

You are connecting over HTTPS. www.atomic-gaming.info doesn't present a valid SSL certificate, so WinHTTP refuses to connect to it for security reasons (this can be overridden).

www.yahoo.com redirects to HTTP. It doesn't work for you because you call WinHttpSetOption incorrectly. Make it

DWORD opt = WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS;
WinHttpSetOption(hSession, WINHTTP_OPTION_REDIRECT_POLICY, &opt, sizeof(opt));

Upvotes: 0

Related Questions