Partilhar via


Definindo configurações de proxy WinINet no WinHTTP

Definindo proxy automático no WinHTTP 5.1

Aplicativos que portam de WinINet para WinHTTP podem precisar usar as mesmas configurações de proxy automático que eles podem recuperar em WinINet ou Internet Explorer (IE). A API WinHTTP versão 5.1 pode recuperar e usar essas configurações de proxy. Em geral, WinHTTP especifica os servidores proxy e proxy bypass em uma base 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 como WinINet ou IE, o cliente WinHTTP deve definir configurações de proxy para a sessão. Além disso, se o IE ou o WinINet estiverem configurados para usar a Descoberta Automática de Proxy da Web (WPAD), 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á sendo executado 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 sendo executado 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 os servidores de nome de proxy (lpszProxy) e proxy bypass (lpszProxyBypass). O nome do proxy e os valores de bypass de 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á sendo executado como um serviço

O aplicativo deve garantir que as configurações do Registro para 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 pode 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 registo do utilizador não for uma opção, a aplicação pode chamar WinHttpOpen com o WINHTTP_ACCESS_TYPE_DEFAULT_PROXY especificado no parâmetro dwAccessType. Especificar o proxy padrão na chamada para WinHttpOpen indica à API WinHTTP que recupere a configuração do proxy definida utilizando o utilitário WinHTTP proxycfg.exe. Depois de as definições do registo para um utilizador individual terem sido carregadas, a aplicação segue os passos descritos em A aplicação está a ser executada numa conta de utilizador 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 WPAD. WinHttpGetIEProxyConfigForCurrentUser retorna a estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG que contém o membro fAutoDetect. Um valor de TRUE para este membro indica que WPAD é usado, e o membro lpszAutoConfigUrl contém o URL WPAD.

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

Se WPAD for usado, o aplicativo chamará WinHttpGetProxyForUrl para obter o proxy da 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 proxy automático. A aplicação 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 de proxy da estrutura WINHTTP_CURRENT_USER_IE_PROXY_CONFIG. A função WinHttpGetProxyForUrl retorna o nome do proxy e a lista de exclusão 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 de WINHTTP_PROXY_INFO que contém o proxy e o bypass de proxy a serem usados para a solicitação.

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

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