Как сказать WinINet использовать учетные данные прокси-сервера IE - PullRequest
5 голосов
/ 03 марта 2012

В Internet Explorer я могу установить прокси-сервер.Затем при доступе к Интернету IE запросит у меня учетные данные прокси и при необходимости сохранит их.Новые экземпляры IE получают учетные данные.

Я также вижу, что учетные данные сохраняются в диспетчере учетных данных как общие учетные данные.Имя соответствует соглашению об именах, например Microsoft_WinInet_ [proxyserver: port] / [proxyserver.acme.com].

Мое приложение использует WinINet.В настоящее время мы устанавливаем учетные данные через InternetSetOption с помощью INTERNET_OPTION_PROXY_USERNAME и INTERNET_OPTION_PROXY_PASSWORD.

Но вместо этого я хочу сказать WinINet использовать учетные данные IE (или диспетчера учетных данных) для текущего пользователя.

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Чтобы WinINet использовал учетные данные менеджера учетных данных, используйте функцию InternetErrorDlg, например:

retry:
  BOOL fRet = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0);
  DWORD dwError = ::GetLastError();
  DWORD statusCode(0);
  DWORD statusLen = sizeof(DWORD);  
  DWORD headerIndex = 0;
  ::HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, 
                  &statusCode, &statusLen, &headerIndex);

  if (statusCode == HTTP_STATUS_PROXY_AUTH_REQ) 
  {
    DWORD dwFlags = FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
                    FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | 
                    FLAGS_ERROR_UI_FLAGS_GENERATE_DATA;
    DWORD res =::InternetErrorDlg(GetDesktopWindow(), hRequest, 
                                  ERROR_INTERNET_INCORRECT_PASSWORD, dwFlags, NULL);
    if (res == ERROR_INTERNET_FORCE_RETRY)
      goto retry;
    else
      return false;
  }

InternetErrorDlg вернет ERROR_INTERNET_FORCE_RETRY, если ему удастся получить учетные данные (из CM или запросить пользователя).).

Флаг FLAGS_ERROR_UI_FLAGS_NO_UI (не используется выше) можно использовать, чтобы избежать отображения диалогового окна, запрашивающего у пользователя учетные данные.

Хулио

1 голос
/ 12 апреля 2013

Инициализировать использование функций WinINet с предопределенными параметрами прокси из IE, как это

HINTERNET hOpen = NULL;

hOpen = InternetOpen(L"XXX", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

...

...