Cómo realizar consultas mediante programación y establecer configuración de proxy en Internet Explorer

Seleccione idioma Seleccione idioma
Id. de artículo: 226473 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Explica los necesarios los pasos para mediante programación, consultar y establecer la información de configuración de proxy para Internet Explorer.

En Internet Explorer 4.x y versiones anteriores, se utilizan las API de InternetQueryOption y InternetSetOption con el indicador INTERNET_OPTION_PROXY. Aunque esta opción se todavía funciona en Internet Explorer 5, varias opciones de conexión se han introducido en la nueva versión. Dado esto, el indicador INTERNET_OPTION_PROXY devolverá sólo el servidor proxy "estático" establecer. La opción estática es la información de servidor de proxy almacenada en la sección HKEY_CURRENT_USER del mismo modo que estaba en Internet Explorer 4.0

Nota INTERNET_OPTION_PROXY no cambia definitivamente la configuración. Esto realiza para el proceso actual sólo cuando se utiliza un identificador NULL. Sin embargo, también puede cambiar la configuración de una base por sesión si se envía un identificador de sesión válido en (sesión controladores se obtienen mediante la API InternetOpen()).

Si en Internet Explorer 5, especificó una opción de conexión diferentes (como una conexión de acceso telefónico) como el valor predeterminado, es posible que la información de proxy que se obtiene mediante el INTERNET_OPTION_PROXY indicador es incorrecta para la sesión actual de Internet Explorer. Por este motivo, en Internet Explorer 5, se recomienda que el INTERNET_OPTION_PER_CONNECTION_OPTION utilizarse en su lugar.

Nota INTERNET_OPTION_PER_CONNECTION_OPTION hace que la configuración para modificarse en todo el sistema cuando se utiliza un identificador NULL. Para reflejar correctamente la configuración de proxy global, debe llamar a la función InternetSetOption con el indicador de opción INTERNET_OPTION_REFRESH. O, para establecer la configuración en una base por sesión, se puede utilizar un identificador de sesión válido.

Nota Todavía es posible cambiar información de proxy para el proceso de whgke sin afectar a la configuración de equipo global de Internet Explorer 5 y versiones posteriores. Para ello, debe llamar a la función InternetSetOption en el identificador devuelto por la función InternetOpen mediante la opción INTERNET_OPTION_PER_CONNECTION_OPTION. El ejemplo de código siguiente cambia al proxy para todo el proceso, aunque el controlador hInternet está cerrado y no se utiliza para la solicitud real.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...);
InternetCloseHandle (hInternet);

Más información

En Internet Explorer 4.x, un mecanismo típico para consultar la información de proxy tendría este aspecto:
unsigned long        nSize = 4096;
char                 szBuf[4096] = { 0 };
INTERNET_PROXY_INFO* pInfo = (INTERNET_PROXY_INFO*)szBuf;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo, &nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
				
En Internet Explorer 5, la forma recomendada es utilizar código similar al siguiente:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[5];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 5;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
   if(Option[0].Value.pszValue != NULL)
   printf("%s\n", Option[0].Value.pszValue);

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL)
  printf("PROXY_TYPE_AUTO_PROXY_URL\n");

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT)
   printf("PROXY_TYPE_AUTO_DETECT\n");

INTERNET_VERSION_INFO      Version;
nSize = sizeof(INTERNET_VERSION_INFO);

InternetQueryOption(NULL, INTERNET_OPTION_VERSION, &Version, &nSize);

if(Option[0].Value.pszValue != NULL)
   GlobalFree(Option[0].Value.pszValue);

if(Option[3].Value.pszValue != NULL)
   GlobalFree(Option[3].Value.pszValue);

if(Option[4].Value.pszValue != NULL)
   GlobalFree(Option[4].Value.pszValue);
				
el código anterior especifica la conexión estableciendo la cadena pszConnection en la estructura INTERNET_PER_CONN_OPTION_LIST. Estableciendo esta cadena en NULL, se recuperará la información de configuración para el valor predeterminado (o LAN) configuración.

La primera opción (opción INTERNET_PER_CONN_AUTOCONFIG_URL [0]) devolverá la dirección URL especificada para la configuración automática del servidor proxy. La segunda opción (opción INTERNET_PER_CONN_AUTODISCOVERY_FLAG [1]) detectará si detectar el automáticamente está habilitada o no para la conexión especificada. La tercera opción determinará qué combinación de indicadores se establecieron para esta conexión concreta. Las dos últimas opciones corresponden a la misma información que se utilizó whe recuperado INTERNET_OPTION_PROXY en Internet Explorer 4.x.

Como puede ver también, las opciones que potencialmente pueden devolver valores de cadena se liberan mediante GlobalFree(). Esto es porque se asignan los búferes de cadena para el por la biblioteca WININET y es para el programador para liberar el búfer después de utilizarlo.

Para obtener información de una conexión diferente, simplemente cambiar la cadena List.pszConnection para que señale la entrada de configuración de marcado está interesado.

De forma similar, para establecer información de proxy, deberá utilizar la misma técnica, pero con InternetSetOption() en su lugar, por ejemplo:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[1];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[0].Value.pszValue = "http://myproxy:8080";

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());

				
una vez más, cambiará el ejemplo anterior el predeterminado (o LAN) configuración (List.pszConnection == NULL). En el ejemplo, se cambia la información del servidor de proxy "estático" a "http://myproxy" en el puerto 8080. De forma similar también puede cambiar la URL de configuración automática:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[2];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[0].Value.pszValue = "http://myserver/get_proxy_info.dll";
Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_AUTO_PROXY_URL;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 2;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
				
al configurar Internet Explorer que se utilizará un servidor proxy para HTTP y vaya directo para otros protocolos, utilice el código para seguir.

Nota El búfer que se pasa al INTERNET_PER_CONN_PROXY_SERVER tiene la configuración para cada protocolo (este código establece sólo HTTP y todos los demás conexión directa de uso de protocolos).

Nota El INTERNET_PER_CONN_FLAGS establece el valor para ambos tipos de proxy (directo y a través de proxy) de un elemento de la matriz de lista de opciones, como se muestra a continuación, en el código.

Nota Tendrá que OR estos indicadores en un lugar. Si coloca estos indicadores en otro elemento de lista, se mostrará correctamente (Internet Explorer OPTIONS), pero sólo uno de los indicadores (el primero se establece) funcionará.
int main(int argc, char * argv[]) 
{ 
char buff[256] = "http=http://<ProxyServerName>:80"; 
// To include server for FTP, HTTPS, and so on, use the string
// (ftp=http://<ProxyServerName>:80; https=https://<ProxyServerName>:80) 
INTERNET_PER_CONN_OPTION_LIST    List; 
INTERNET_PER_CONN_OPTION         Option[3]; 
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER; 
Option[0].Value.pszValue = buff; 

Option[1].dwOption = INTERNET_PER_CONN_FLAGS; 
Option[1].Value.dwValue = PROXY_TYPE_PROXY; 
Option[1].Value.dwValue |= PROXY_TYPE_DIRECT; 
// This option sets all the possible connection types for the client. 
// This case specifies that the proxy can be used or direct connection is possible.

Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS; 
Option[2].Value.pszValue = "<local>"; 

 

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 
List.pszConnection = NULL; 
List.dwOptionCount = 3; 
List.dwOptionError = 0; 
List.pOptions = Option; 

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize)) 
printf("InternetSetOption failed! (%d)\n", GetLastError()); 

InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL); 
//The connection settings for other instances of Internet Explorer. 

return 0; 

}
				
en el ejemplo anterior (volver a la predeterminada o configuración de LAN), tendrá que especificar la URL de configuración de proxy automático y establecer el indicador de opción para habilitar la configuración de proxy automática.

Referencias

Documentación de MSDN API WinInet, abril de 1999

Propiedades

Id. de artículo: 226473 - Última revisión: martes, 10 de abril de 2007 - Versión: 4.0
La información de este artículo se refiere a:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Service Pack 1 de Microsoft Internet Explorer 4.01
  • Microsoft Internet Explorer 5.0
  • Microsoft Windows Internet Services (WinInet)
Palabras clave: 
kbmt kbhowto KB226473 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 226473
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com