Встроенная проверка подлинности Windows Wininet

Привет, эксперты, мне нужно отправить http-запрос из приложения C++ с помощью API wininet. Пользователь находится за прокси-сервером ISA, который настроен на использование встроенной аутентификации Windows. Когда я получаю сообщение об ошибке 407 (требуется проверка подлинности прокси-сервера), я использую InternetErrorDlg, чтобы запросить у пользователя учетные данные. Это не идеальное решение, поскольку IE может прозрачно использовать учетные данные текущего пользователя. Есть ли способ сделать это ?

Пример кода для запроса

hRequest = HttpOpenRequest ( 
    hConnect, 
    "POST", 
    query.c_str(), 
    HTTP_VERSION, 
    NULL, 
    cAcceptTypes, 
    INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE| INTERNET_FLAG_KEEP_CONNECTION,
    0);

bRet = HttpSendRequest(
                hRequest,
                NULL,
                0,
                (LPVOID)dataXml.c_str(),
                (DWORD)dataXml.length());

bRet = HttpQueryInfo(
                hRequest,
                HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE,
                &dwStatus,
                &dwSize,
                NULL);


if (dwStatus == HTTP_STATUS_PROXY_AUTH_REQ)
{

    ProxyAuthenticate( hRequest );  // Here I call InternetErrorDlg
            bRet = HttpSendRequest(
                hRequest,
                NULL,
                0,
                (LPVOID)dataXml.c_str(),
                (DWORD)dataXml.length());

}


person SparcU    schedule 28.04.2011    source источник
comment
Можете ли вы показать какой-нибудь пример кода, WinInet обычно автоматически обрабатывает аутентификацию, используя локальные учетные данные, если вы явно не отключили аутентификацию с помощью InternetSetOption.   -  person Chris Taylor    schedule 29.04.2011


Ответы (1)


Попробуйте использовать INTERNET_OPEN_TYPE_PRECONFIG для инициализации Wininet в вашем процессе:

InternetOpen(clientName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
person c-smile    schedule 28.04.2011
comment
hSession = InternetOpen (ddd, INTERNET_OPEN_TYPE_PRECONFIG, NULL, 0, 0); - person SparcU; 29.04.2011