gpt4 book ai didi

c++ - 如何告诉 WinINet 使用 IE 的代理服务器凭据

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:08 30 4
gpt4 key购买 nike

在 Internet Explorer 中我可以设置代理服务器。然后,当访问互联网时,IE 会提示我输入代理凭据并可选择保存它们。 IE 的新实例获取凭据。

我还可以看到凭据作为通用凭据保存在凭据管理器中。该名称遵循类似 Microsoft_WinInet_[proxyserver:port]/[proxyserver.acme.com] 的命名约定。

我的应用程序使用 WinINet。我们目前正在通过 InternetSetOption 使用 INTERNET_OPTION_PROXY_USERNAME 和 INTERNET_OPTION_PROXY_PASSWORD 设置凭据。

但我想告诉 WinINet 使用当前用户的 IE(或凭据管理器)凭据。

最佳答案

让 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;
}

如果成功获取凭据(从 CM 或通过提示用户),InternetErrorDlg 将返回 ERROR_INTERNET_FORCE_RETRY。

FLAGS_ERROR_UI_FLAGS_NO_UI 标志(上面未使用)可用于避免显示提示用户输入凭据的对话框。

胡里奥

关于c++ - 如何告诉 WinINet 使用 IE 的代理服务器凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542750/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com