WinHttp ne fonctionne pas lorsque le nom d'hôte ne contient www.(erreur 12029)
-
07-09-2020 - |
Question
Je suis en train de tester cette winhttp exemple de http://msdn.microsoft.com/en-us/library/aa384270%28v=vs.85%29.aspx
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 );
// 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 );
Cela fonctionne bien mais si je sors la www.à partir de www.microsoft.com je reçois un 12029 ERROR_WINHTTP_CANNOT_CONNECT erreur, quelle est la raison?
Tous les sites travaillent avec winhttp si vous utilisez www.?parce que certains sites web ne pas utiliser le web, je ne pouvais pas trouver tout droit maintenant, mais j'ai vu quelques sites qui montrent des "Serveur introuvable" sur le navigateur lors de l'accès avec www.mais ils ont travaillé sans elle.
La solution
microsoft.com retourne un 301 Moved Permanently
l'en-tête, pour obtenir winhttp de l'honneur et de la rediriger vers l'URL dans la Location:
l'en-tête (www.) vous avez besoin d'utiliser WinHttpSetOption
appropriée pour régler le WINHTTP_OPTION_REDIRECT_*
option(s).