No se cambia el valor del timeout en tiempo de ejecución cuando cambio el valor incovando a la API de WinINET cuando accedo a través de un proxy y protocolo seguro

Es un título largo, pero no creo que se pueda resumir de mejor forma. Imaginad que tenéis un código para cambiar el valor del timeout de la operación cuando usáis el API de WinINET. Este cambio funciona perfectamente menos cuando la petición se hace a través de un proxy utilizando un canal seguro SSL.

¿Por qué funciona cuando va a través de un proxy o a través de SSL pero no cuando juntamos los dos?

La respuesta es que cuando se realiza una petición HTTPS a un proxy se usan dos manejadores, uno para la petición exterior y otro para manejar el CONNECT del túnel del proxy. Por lo que se marca el flag INTERNET_NO_CALLBACK para evitar que el que invoca pueda recibir notificaciones duplicadas.

¿Eso implica que no podemos hacer nada para cambiarlo?. La verdad es que tenemos dos opciones, una de ellas es cambiar un parámetro del registro de Windows (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings) siguiendo las instrucciones que se detallan en este artículo: https://support.microsoft.com/kb/181050/es

Otra opción es la de crear un subproceso para que realice ese cambio usando la función InternetCloseHandle https://msdn.microsoft.com/en-us/library/windows/desktop/aa384350(v=vs.85).aspx . En este artículo se detalla cómo realizar ese cambio: https://support.microsoft.com/kb/224318

 

Espero que os sirva de ayuda

- José Ortega Gutiérrez