Интегрированная проверка подлинности Windows Wininet - PullRequest
3 голосов
/ 28 апреля 2011

Привет эксперты Мне нужно отправить запрос http из приложения C ++, используя Wininet API. Пользователь находится за прокси-сервером 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());

}

1 Ответ

0 голосов
/ 29 апреля 2011

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

InternetOpen(clientName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...