在请求句柄上响应 WinHTTP 代理质询
使用 WinHttpSetCredentials 指定代理身份验证目标和受支持的提议方案,然后有意识地重试该请求。
WinHTTP 请求收到 407 之后,使用 WinHttpQueryAuthSchemes 检查对方提供的方法,并选择客户端与账户都支持的一种。在该请求上设置凭据:
WinHttpSetCredentials(
requestHandle,
WINHTTP_AUTH_TARGET_PROXY,
selectedScheme,
proxyUser,
proxyPassword,
nullptr);
最后一个保留参数必须为 null。检查布尔返回值,失败时查看 GetLastError。成功只表示 API 接受了该设置,并不表示代理接受了登录。
通过受控的身份验证流程重新发送,并检查响应。限制重试次数;如果重复该操作,已经消费过的请求正文流必须能够重放。目标返回的 401 使用 WINHTTP_AUTH_TARGET_SERVER,与本处的代理目标不同。
这些凭据只对单个请求生效。WinHTTP 不会把它们变成供后续请求使用的通用凭据存储。复用的已通过身份验证的连接可能暂时掩盖另一次质询,因此应用程序仍必须处理未来的质询。
把代理选择单独处理。带凭据的地址字符串不能取代这个请求句柄 API,正如成功抵达端点并不等于完成身份验证。