如何告诉 WinINet 使用 IE 的代理服务器凭据
How to tell WinINet to use IE's proxy server credentials
在internet explorer中,我可以设置代理服务器。然后,当访问互联网时,IE会提示我输入代理凭据,并可选择保存它们。IE的新实例会获取凭据。
我还可以看到凭据作为通用凭据保存在凭据管理器中。该名称遵循类似Microsoft_WinInet_[proxyserver:port]/[proxysserver.acme.com]的命名约定。
我的应用程序使用WinINet。我们目前正在通过InternetSetOption使用INTERNET_OPTION_PROXY_USERNAME和INTERNET _OPTIONPROXY_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;
}
如果InternetErrorDlg成功获取凭据(从CM或通过提示用户),它将返回ERROR_INTERNET_FORCE_RETRY。
FLAGS_ERROR_UI_FLAGS_NO_UI标志(以上未使用)可用于避免显示提示用户输入凭据的对话框。
Julio
初始化WinINet函数的使用,该函数具有来自类似的IE的预定义代理参数
HINTERNET hOpen = NULL;
hOpen = InternetOpen(L"XXX", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
相关文章:
- 代理对象的常量正确性
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- librdkafka c++ 库是否有模拟服务器或代理
- C++ Linux 代理服务器通信
- Internet Connect无法通过FTP代理连接到FTP服务器
- C 中客户端代理服务器系统的任何库
- iwebbrowser2 ie = edge和用户代理字符串
- 使用带有gsoap代理类的gsoap独立服务器实现http-get
- 如何读取 HTTP 请求(HTTP 代理服务器)
- QSslSocket代理服务器(https)和证书.握手错误
- 如何告诉 WinINet 使用 IE 的代理服务器凭据
- 使用libcURL通过HTTP代理连接FTP服务器失败
- Django作为mysql代理服务器
- 通过代理服务器增强asio套接字连接
- C++中的HTTP代理服务器
- 代理服务器正在丢弃数据包
- 检测Windows(IE)代理设置更改
- 如何向 socks5 代理服务器添加身份验证