2011-04-28 71 views
3

嗨,專家 我需要使用wininet API從C++應用程序發送http請求。 用戶位於配置爲使用集成Windows身份驗證的ISA代理服務器的後面。 當我得到錯誤407(需要代理身份驗證)時,我使用InternetErrorDlg向用戶請求憑據。這不是一個理想的解決方案,因爲IE能夠透明地使用當前用戶的憑據。有沒有辦法做到這一點 ?對於要求集成Windows身份驗證Wininet

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()); 

}

+0

能告訴你一些示例代碼,WinInet的通常處理驗證自動使用本地憑證,除非您使用InternetSetOption明確禁用了身份驗證。 – 2011-04-28 20:11:36

回答

0

嘗試使用INTERNET_OPEN_TYPE_PRECONFIG在你的進程初始化的Wininet

示例代碼:

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

這是我使用的 – SparcU 2011-04-28 22:41:56

+0

hSession = InternetOpen(「ddd」,INTERNET_OPEN_TYPE_PRECONFIG,NULL,0,0); – SparcU 2011-04-28 22:43:37