在Internet Explorer中,我可以设置代理服务器。然后,当访问互联网时,IE将提示我输入代理凭据并选择保存它们。 IE的新实例获取凭据。
我还可以看到凭据作为Generic Credential保存在Credentials Manager中。该名称遵循命名约定,如Microsoft_WinInet_ [proxyserver:port] / [proxyserver.acme.com]。
我的应用使用WinINet。我们目前通过InternetSetOption使用INTERNET_OPTION_PROXY_USERNAME和INTERNET_OPTION_PROXY_PASSWORD设置凭据。
但我想告诉WinINet为当前用户使用IE(或凭据管理器)凭据。
答案 0 :(得分:2)
让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成功获取凭据(来自CM或通过提示用户),则会返回ERROR_INTERNET_FORCE_RETRY。
FLAGS_ERROR_UI_FLAGS_NO_UI标志(上面未使用)可用于避免显示提示用户输入凭据的对话框。
胡
答案 1 :(得分:1)
使用IE中的预定义代理参数初始化WinINet函数的使用
HINTERNET hOpen = NULL;
hOpen = InternetOpen(L"XXX", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
...