2012-03-03 14 views
5

En Internet Explorer, puedo configurar el servidor proxy. Luego, cuando accedas a Internet, IE me pedirá las credenciales de proxy y, opcionalmente, las guardaré. Nuevas instancias de IE recogen las credenciales.Cómo decirle a WinINet que use las credenciales del servidor proxy de IE

También puedo ver que las credenciales se guardan en el Administrador de credenciales, como credencial genérica. El nombre sigue una convención de nomenclatura como Microsoft_WinInet_ [proxyserver: port]/[proxyserver.acme.com].

Mi aplicación utiliza WinINet. Actualmente estamos estableciendo las credenciales a través de InternetSetOption con INTERNET_OPTION_PROXY_USERNAME e INTERNET_OPTION_PROXY_PASSWORD.

Pero, en cambio, quiero decirle a WinINet que use las credenciales de IE (o el Administrador de credenciales) para el usuario actual.

Respuesta

2

La manera de tener WinINet utilizar credenciales de administrador de credenciales es el uso de la función InternetErrorDlg, así:

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 volverá ERROR_INTERNET_FORCE_RETRY si tenía éxito en obtener credenciales (desde el CM o preguntar al usuario) .

El indicador FLAGS_ERROR_UI_FLAGS_NO_UI (no utilizado anteriormente) se puede utilizar para evitar mostrar el cuadro de diálogo que solicita credenciales al usuario.

Julio

1

inicializar el uso de funciones de WinInet con los parámetros predefinidos de proxy de IE como esto

HINTERNET hOpen = NULL; 

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

...

Cuestiones relacionadas