WPAD 已启用,为什么 WinHTTP 的代理地址为空?
读取 Windows 代理配置与为某个目标解析代理是两项不同的操作。服务标识又增加了一道边界。
自动代理检测可能已启用,而手动代理字符串却为空。WinHttpGetIEProxyConfigForCurrentUser() 返回的是配置字段,而不是 每个目标的最终端点。
| 字段 | 含义 |
|---|---|
| 手动代理 | 显式配置的值 |
| 自动配置 URL | PAC 脚本的位置 |
| 自动检测标志 | 是否启用了发现 |
该结构体是输出。在调用函数之前设置其自动检测成员并不会启用 Windows 发现。请使用返回的字段,按照文档所述的标志构造单独的自动代理请求。
先解析,再应用
诸如 WinHttpGetProxyForUrl() 之类的 API 会评估实际的目标 URL。请提供该 URL,而不是 PAC 下载 URL,并将解析结果应用到相应的 WinHTTP 请求。
直接结果同样有效。脚本下载、脚本评估和代理连接的错误发生在不同阶段。请检查失败代码,并遵守返回字符串的所有权规则。
谁的配置?
“CurrentUser”指的是调用方的上下文。未经适当模拟的服务可能读取其服务账户的设置,而不是桌面用户的设置。
请有意选择:服务是使用托管设置,还是遵循已授权用户的配置,包括不存在交互式用户时的行为。令牌处理和资源清理必须遵循受支持的标识 API。
进行诊断时,请把调用账户、配置字段、目标、解析结果和首次连接错误放在一起。这样可以看是哪个阶段产生了空值或失败的路由。