【问题标题】:How to tell WinINet to use IE's proxy server credentials如何告诉 WinINet 使用 IE 的代理服务器凭据
【发布时间】:2012-03-21 12:20:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ proxy wininet


    【解决方案1】:

    让 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 标志(上面未使用)可用于避免显示提示用户输入凭据的对话框。

    胡里奥

    【讨论】:

      【解决方案2】:

      像这样使用 IE 中预定义的代理参数初始化 WinINet 函数的使用

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

      ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-01
        • 2020-11-07
        相关资源
        最近更新 更多