嗨专家
我需要使用Wininet API从C++应用程序发送一个http请求。
用户位于配置为使用集成Windows身份验证的ISA代理服务器之后。
当我收到错误407(需要代理身份验证)时,我使用InternetErrorDlg向用户询问凭据。这不是理想的解决方案,因为IE能够透明地使用当前用户的凭据。有没有办法做到这一点 ?

请求的示例代码

hRequest = HttpOpenRequest (
    hConnect,
    "POST",
    query.c_str(),
    HTTP_VERSION,
    NULL,
    cAcceptTypes,
    INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE| INTERNET_FLAG_KEEP_CONNECTION,
    0);

bRet = HttpSendRequest(
                hRequest,
                NULL,
                0,
                (LPVOID)dataXml.c_str(),
                (DWORD)dataXml.length());

bRet = HttpQueryInfo(
                hRequest,
                HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE,
                &dwStatus,
                &dwSize,
                NULL);


if (dwStatus == HTTP_STATUS_PROXY_AUTH_REQ)
{

    ProxyAuthenticate( hRequest );  // Here I call InternetErrorDlg
            bRet = HttpSendRequest(
                hRequest,
                NULL,
                0,
                (LPVOID)dataXml.c_str(),
                (DWORD)dataXml.length());

}

最佳答案

尝试在过程中使用INTERNET_OPEN_TYPE_PRECONFIG初始化Wininet:

InternetOpen(clientName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

关于c++ - 集成Windows身份验证Wininet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5824174/

10-15 12:06