Пишу такой код
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD dwSize = 0;
DWORD dwDownloaded = 0;
LPSTR pszOutBuffer;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
hSession = WinHttpOpen( L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0 );
if( hSession )
hConnect = WinHttpConnect( hSession, L"mysite.ru",
INTERNET_DEFAULT_HTTP_PORT, 0 );
if( hConnect )
hRequest = WinHttpOpenRequest( hConnect, L"GET", L"test.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if(hRequest )
bResults = WinHttpSendRequest( hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0 , 0 );
if( bResults )
bResults = WinHttpReceiveResponse( hRequest, NULL );
else
switch(GetLastError())
{
case ERROR_WINHTTP_CANNOT_CONNECT: ShowMessage("1"); break;
case ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED: ShowMessage("2"); break;
case ERROR_WINHTTP_CONNECTION_ERROR: ShowMessage("3"); break;
case ERROR_WINHTTP_INCORRECT_HANDLE_STATE: ShowMessage("4"); break;
case ERROR_WINHTTP_INCORRECT_HANDLE_TYPE: ShowMessage("5"); break;
case ERROR_WINHTTP_INTERNAL_ERROR: ShowMessage("6"); break;
case ERROR_WINHTTP_INVALID_URL: ShowMessage("7"); break;
case ERROR_WINHTTP_LOGIN_FAILURE: ShowMessage("8"); break;
case ERROR_WINHTTP_NAME_NOT_RESOLVED: ShowMessage("9"); break;
case ERROR_WINHTTP_OPERATION_CANCELLED: ShowMessage("10"); break;
case ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW: ShowMessage("11"); break;
case ERROR_WINHTTP_SECURE_FAILURE: ShowMessage("12"); break;
case ERROR_WINHTTP_SHUTDOWN: ShowMessage("13"); break;
case ERROR_WINHTTP_TIMEOUT: ShowMessage("14"); break;
case ERROR_WINHTTP_UNRECOGNIZED_SCHEME: ShowMessage("15"); break;
case ERROR_NOT_ENOUGH_MEMORY: ShowMessage("16"); break;
case ERROR_INVALID_PARAMETER: ShowMessage("17"); break;
case ERROR_WINHTTP_RESEND_REQUEST: ShowMessage("18"); break;
default: ShowMessage("-"+IntToStr((int)GetLastError())); break;
}
if( bResults )
{
do
{
dwSize = 0;
WinHttpQueryDataAvailable( hRequest, &dwSize );
pszOutBuffer = new char[dwSize+1];
if( !pszOutBuffer )
dwSize=0;
else
{
ZeroMemory( pszOutBuffer, dwSize+1 );
WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded);
if(dwSize)
ShowMessage(AnsiString(pszOutBuffer));
delete [] pszOutBuffer;
}
} while( dwSize > 0 );
}
if( hRequest ) WinHttpCloseHandle( hRequest );
if( hConnect ) WinHttpCloseHandle( hConnect );
if( hSession ) WinHttpCloseHandle( hSession );
}
На Win 7 это работает на ура, на ХР выдает неверный дескриптор (GetLastError=6 в списке сообщений об ошибках в default). Что самое интересное, эту же ошибку получаю на 8.1. Что это значит и как ее победить?