AutoProxy 缓存

WinHttpGetProxyForUrl 函数针对指定的 URL 按请求执行 autoproxy 查找。 如果返回多个代理,客户端应用程序应在发送请求 (之前测试每个代理,有关详细信息,请参阅 WinHTTP) AutoProxy 问题中的 “当前仅支持一个代理服务器 ”部分。 本主题中的信息适用于客户端指定自动代理发现时对 WinHttpGetProxyForUrl 的调用。

WinHttpGetProxyForUrl (可选)查找 autoproxy URL 并从该站点下载 autoproxy 脚本。 WinHttp 使用 autoproxy 脚本来查找代理服务器。 为指定的会话缓存 autoproxy URL 和 autoproxy 脚本。 每个会话只缓存一个自动 URL 和脚本。 通常,将缓存 autoproxy 脚本和 URL,直到与计算机关联的 IP 地址发生更改。 如果在调用 WinHttpGetProxyForUrl 期间检测到新的 IP 地址,则调用将尝试查找新的自动 URL 并编写脚本并缓存结果。 每个会话只允许一个用户,这样缓存的数据就不会与计算机上的其他用户共享。 有关详细信息,请参阅 WinHTTP 会话概述

如果在调用 WinHttpGetProxyForUrl 时进程外服务处于活动状态,则缓存的 autoproxy URL 和脚本可供整个计算机使用。 但是,如果使用进程外服务,并且 pAutoProxyOptions 结构中的 fAutoLogonIfChallenged 标志为 true,则不会缓存 autoproxy URL 和脚本。 因此,调用将 fAutoLogonIfChallenged 成员设置为 TRUEWinHttpGetProxyForUrl 会导致可能影响性能的其他开销操作。 以下步骤可用于提高性能。

提高性能

  1. 调用 WinHttpGetProxyForUrl ,并将 fAutoLogonIfChallenged 参数设置为 false。 将缓存 autoproxy URL 和脚本,以便将来调用 WinHttpGetProxyForUrl
  2. 如果步骤 1 失败, 请使用 ERROR_WINHTTP_LOGIN_FAILURE 调用 WinHttpGetProxyForUrl ,并将 fAutoLogonIfChallenged 成员设置为 TRUE