Como consultar e definir configurações de proxy no Internet Explorer através de programação

Traduções deste artigo Traduções deste artigo
ID do artigo: 226473 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Este artigo explica os necessários etapas para consultar e definir as informações de configuração proxy para o Internet Explorer através de programação.

Em Internet Explorer 4.x e anteriores, as APIs InternetQueryOption e InternetSetOption são usados com o sinalizador INTERNET_OPTION_PROXY. Enquanto essa opção ainda funcionará no Internet Explorer 5, várias opções de conexão foram introduzidas na nova versão. Considerando isso, o sinalizador INTERNET_OPTION_PROXY retornará apenas o servidor proxy "static" configuração. A opção estática é as informações do servidor proxy armazenadas em HKEY_CURRENT_USER da mesma maneira que era em Internet Explorer 4.0

Observação INTERNET_OPTION_PROXY não altera permanentemente as configurações. Ele faz isso para o processo atual somente quando um identificador NULL é usado. No entanto, ele também pode alterar as configurações em uma base por sessão, se um identificador de sessão válido é enviado em (sessão alças são obtidas usando a API InternetOpen()).

Se em Internet Explorer 5, você especificou uma opção de conexão diferente (como uma conexão discada) como padrão, é possível que as informações de proxy que obter usando o INTERNET_OPTION_PROXY sinalizar pode estar incorreto para a sessão atual do Internet Explorer. Por esse motivo, em Internet Explorer 5, é recomendável que o INTERNET_OPTION_PER_CONNECTION_OPTION ser usado em vez disso.

Observação INTERNET_OPTION_PER_CONNECTION_OPTION faz com que as configurações para ser alterado em todo o sistema quando um identificador NULL é usado. Para refletir corretamente as configurações de proxy global, você deve chamar a função InternetSetOption com o sinalizador de opção INTERNET_OPTION_REFRESH. Ou, para definir as configurações em uma base por sessão, um identificador de sessão válido pode ser usado.

Observação Ele ainda é possível alterar informações de proxy para o processo whgke sem afetar as configurações de máquina global no Internet Explorer 5 e versões posteriores. Para fazer isso, você deve chamar a função InternetSetOption no identificador retornado pela função InternetOpen usando a opção INTERNET_OPTION_PER_CONNECTION_OPTION. O exemplo de código a seguir altera o proxy para todo o processo mesmo que a alça de hInternet é fechada e não é usada para a solicitação real.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...);
InternetCloseHandle (hInternet);

Mais Informações

Em Internet Explorer 4.x, um mecanismo típico para consultar as informações de proxy teria esta aparência:
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());
				
Em Internet Explorer 5, a maneira recomendada é usar código semelhante ao abaixo:
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);
				
o código acima Especifica a conexão, definindo a seqüência de caracteres pszConnection na estrutura INTERNET_PER_CONN_OPTION_LIST. Definindo essa seqüência de caracteres como NULL, as informações de configuração serão recuperadas para o padrão (ou rede local) as configurações.

A primeira opção (opção [0] INTERNET_PER_CONN_AUTOCONFIG_URL) retornará o URL especificado para a configuração automática do servidor proxy. A segunda opção (opção INTERNET_PER_CONN_AUTODISCOVERY_FLAG [1]) detectará se detectar o automaticamente opção está habilitada ou não para a conexão especificada. A terceira opção determinará qual combinação de sinalizadores de foram definidas para esta conexão específica. As duas últimas opções correspondem às informações mesmas como quando recuperado INTERNET_OPTION_PROXY foi usado no Internet Explorer 4.x.

Como você ver também, as opções que potencialmente podem retornar valores de seqüência de caracteres são liberadas usando GlobalFree(). Isso ocorre porque os buffers de cadeia de caracteres são alocados para você pela biblioteca de WININET e cabe para o programador para liberar o buffer depois usá-lo.

Para obter informações para uma conexão diferente, basta alterar a seqüência de List.pszConnection para apontar para a entrada de configuração de dial-up que você está interessado-lo.

Da mesma forma, para definir informações de proxy, você usaria a mesma técnica, mas com InternetSetOptions() em vez disso, por exemplo:
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());

				
uma vez novamente, o exemplo acima irá alterar o padrão (ou LAN) configurações (List.pszConnection == NULL). No exemplo, as informações do servidor proxy "static" são alteradas para "http://myproxy" na porta 8080. Da mesma forma, você pode também alterar o URL de configuração 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());
				
quando você configurar o Internet Explorer para usar um servidor proxy para HTTP e vá direto para outros protocolos, use o código a seguir.

Observação O buffer é passado para INTERNET_PER_CONN_PROXY_SERVER tem as configurações para cada protocolo (este código define apenas HTTP e todos os outros conexão direta de uso de protocolos).

Observação O INTERNET_PER_CONN_FLAGS define o valor para ambos os tipos de proxy (direto e por meio de proxy) em um elemento de matriz de lista de opções, como mostrado abaixo no código.

Observação Você precisa ou esses sinalizadores em um só lugar. Se você colocar esses sinalizadores no outro elemento da lista, eles serão exibidos corretamente (Internet Explorer OPTIONS), mas somente um dos sinalizadores (a primeira é definido) 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; 

}
				
no exemplo acima (novamente o padrão ou configuração de rede local), você deve especificar a URL de configuração de proxy automática e definir o sinalizador de opção para habilitar a configuração de proxy automático.

Referências

Documentação do MSDN API WinInet, abril de 1999

Propriedades

ID do artigo: 226473 - Última revisão: terça-feira, 10 de abril de 2007 - Revisão: 4.0
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 Edição de 128 Bits
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 4.01 Service Pack 1
  • Microsoft Internet Explorer 5.0
  • Microsoft Windows Internet Services (WinInet)
Palavras-chave: 
kbmt kbhowto KB226473 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 226473
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

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