Compartilhar via


Definindo configurações de proxy WinINet no WinHTTP

Definindo o proxy automático no WinHTTP 5.1

Os aplicativos que fazem a portabilidade de WinINet para WinHTTP podem precisar usar as mesmas configurações de reprodução automática que podem ser recuperadas em WinINet ou IE (Internet Explorer). A API do WinHTTP versão 5.1 pode recuperar e usar essas configurações de proxy. Em geral, o WinHTTP especifica os servidores de bypass de proxy e proxy por sessão quando a sessão é criada. Essas configurações podem ser substituídas por solicitação.

Para usar a mesma configuração de proxy que WinINet ou IE, o cliente WinHTTP deve definir as configurações de proxy para a sessão. Além disso, se o IE ou WinINet estiver configurado para usar a WPAD (Descoberta Automática de Proxy Web), o cliente WinHTTP que usa essas configurações deverá definir as configurações de proxy por solicitação. As seções a seguir descrevem como especificar as configurações de proxy para uma sessão e uma solicitação:

Definindo a configuração de proxy em uma sessão

O aplicativo está em execução em uma conta de usuário

Antes de uma sessão ser criada, o aplicativo chama WinHttpGetIEProxyConfigForCurrentUser para obter as configurações de proxy do IE. O aplicativo deve estar em execução como uma conta de usuário para obter essas configurações. O parâmetro pProxyConfig é um ponteiro para uma estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG que contém o nome do proxy (lpszProxy) e os servidores de bypass de proxy (lpszProxyBypass). Os valores de bypass de proxy e nome do proxy da estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG são usados para inicializar a sessão WinHTTP. A sessão é inicializada chamando WinHttpOpen com os parâmetros pwszProxyName e pwszProxyBypass obtidos dos membros lpszProxy e lpszProxyBypass da estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG .

O aplicativo está em execução como um serviço

O aplicativo deve garantir que as configurações do Registro de um usuário individual sejam carregadas no registro antes de chamar WinHttpGetIEProxyConfigForCurrentUser. Se essas configurações não forem carregadas no registro, WinHttpGetIEProxyConfigForCurrentUser não poderá obter as configurações de proxy. As configurações do Registro para um usuário individual podem ser carregadas no registro chamando a função LoadUserProfile . Se carregar as configurações do registro do usuário não for uma opção, o aplicativo poderá chamar WinHttpOpen com o WINHTTP_ACCESS_TYPE_DEFAULT_PROXY especificado no parâmetro dwAcessType . Especificar o proxy padrão na chamada para WinHttpOpen informa à API WinHTTP para recuperar o conjunto de configurações de proxy usando o utilitário proxycfg.exe WinHTTP. Depois que as configurações do Registro de um usuário individual tiverem sido carregadas, o aplicativo seguirá as etapas descritas em O aplicativo está em execução em uma conta de usuário para definir o nome do proxy e os servidores de bypass de proxy.

Definindo a configuração de proxy em uma única solicitação

Antes da sessão ser criada, o aplicativo chama WinHttpGetIEProxyConfigForCurrentUser para determinar se WinINet e IE estão configurados para usar o WPAD. WinHttpGetIEProxyConfigForCurrentUser retorna a estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG que contém o membro fAutoDetect . Um valor true para esse membro indica que o WPAD é usado e o membro lpszAutoConfigUrl contém a URL do WPAD.

A configuração automática de proxy é usada

Se o WPAD for usado, o aplicativo chamará WinHttpGetProxyForUrl para recuperar o proxy para a solicitação. O parâmetro lpwszUrl contém a URL para a qual a solicitação está sendo enviada e o parâmetro pAutoProxyOptions contém um ponteiro para a estrutura (WINHTTP_AUTOPROXY_OPTIONS) que contém as opções de reprodução automática. O aplicativo inicializa a estrutura WINHTTP_AUTOPROXY_OPTIONS com as configurações retornadas da estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG na chamada para WinHttpGetIEProxyConfigForCurrentUser. O sinalizador WINHTTP_AUTOPROXY_CONFIG_URL é especificado no membro dwFlags da estrutura WINHTTP_AUTOPROXY_OPTIONS e o membro lpszAutoconfigUrl contém a URL de configuração automática do proxy da estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG . A função WinHttpGetProxyForUrl retorna o nome do proxy e a lista de bypass de proxy nos membros lpszProxy e lpszProxyBypass da estrutura WINHTTP_PROXY_INFO .

Depois que o proxy para a solicitação é obtido de WinHttpGetProxyForUrl, o aplicativo cria a solicitação com WinHttpOpenRequest. Em seguida , WinHttpSetOption é chamado para definir o proxy para a solicitação especificando o identificador de solicitação no parâmetro hInternet . O parâmetro dwOption na chamada para WinHttpSetOption deve ser definido como WINHTTP_OPTION_PROXY e o parâmetro lpBuffer é um ponteiro para uma estrutura WINHTTP_PROXY_INFO que contém o bypass de proxy e proxy a ser usado para a solicitação.

A configuração automática de proxy não é usada

Se a chamada para WinHttpGetIEProxyConfigForCurrentUser indicar que a reprodução automática não é usada, o aplicativo pode simplesmente criar a solicitação com WinHttpOpenRequest. A configuração de proxy é a mesma para toda a sessão e as alterações por solicitação não são necessárias.