Skip to main content
当你的游戏直接使用自定义 HTTP 堆栈而非 xCurl,并需要通过 Fiddler 等代理调试流量时,请参阅本文。

何时适用本指南

如果满足以下一项或多项条件,此指南尤为有用:
  • 你的游戏需要直接检查或应用代理设置。
  • 你的调试流程依赖 Fiddler 或其他开发代理。
  • 你的 HTTP 堆栈未使用 Schannel 作为安全提供程序,必须显式加载代理证书。
有关一般安全指导,请参阅 面向 Microsoft 游戏开发工具包游戏的安全 Web 请求与 WebSocket 最佳实践

XBOX 与 PC 上的代理设置

在 XBOX 上处理代理设置时,如果你的构建和目标环境提供了该路径,优先使用带 WinHttpProxySettingsTypeXBoxWinHttpGetProxySettingsEx。在 XBOX 上,从 April 2026 Microsoft 游戏开发工具包 (GDK) 开始,此 API 是读取代理设置的前瞻性 API。 如果你的游戏面向 XBOX 上更早的 GDK,XBOX 特定的代理设置路径不可用。此时应在 HTTP 堆栈中手动设置代理地址和端口。即便在这些较旧的 GDK 上 XBOX 特定的代理地址 API 不可用,本文后面所述的证书加载路径仍然适用。 PC 游戏也可以通过 WinHTTP 查询代理设置,但不要直接照搬 XBOX 的流程。在 PC 上,WinHttpGetProxySettingsEx 是异步的,因此请先等待操作完成,再调用 WinHttpGetProxySettingsResultEx 并将返回的代理值复制到你的 HTTP 堆栈中。 以下是一个基于 libcurl 的示例:使用 XBOX 代理设置 API 解析代理地址,然后直接传给堆栈。使用 WINHTTP_FLAG_ASYNC 打开会话并注册状态回调,以便代码同时处理同步完成与 ERROR_IO_PENDING 返回。以下示例演示了调用流程:

TLS 提供程序行为

基于 Schannel 的堆栈

如果你的堆栈依赖 Schannel 支持的 TLS 行为,主机会自动应用你配置的代理证书。此行为同样适用于以 Schannel 作为 TLS 提供程序的 libcurl 构建。

非 Schannel 堆栈

如果你的堆栈依赖 OpenSSL 或其他非 Schannel TLS 提供程序,游戏需自行负责显式加载当前调试工具所需的证书。将此证书加载路径保留在你的发布代码中。对于主机端,游戏还应在 RETAIL 构建中保留相关的代理调试路径可用,以便在必要时仍能对通过代理的流量进行诊断。 有关信任、代理与安全默认值的指导,请参阅 面向 Microsoft 游戏开发工具包游戏的安全 Web 请求与 WebSocket 最佳实践

查找代理根证书

对于非 Schannel 堆栈,显式加载与调试工具对应的证书,并将此路径保留在发布代码中。证书位置和使用者取决于工具。例如,XBOX Multiplayer Analysis Tool (XMAT)CurrentUser\Root 中使用证书 Xbox Multiplayer Analysis Tool Root Cert Authority。以下示例查找该证书并将 DER 编码的证书字节复制到游戏所拥有的缓冲区。
此步之后,将 encodedCertificate 传给你所用 TLS 提供程序的证书加载路径即可。

推荐调试流程

  1. XBOX 开发套件上的 Fiddler 中所述,在 XBOX Device Portal 中配置主机代理设置。
  2. 如果你在 April 2026 GDK 或更高版本上面向 XBOX 且游戏需要直接检查代理设置,请使用带 WinHttpProxySettingsTypeXBoxWinHttpGetProxySettingsEx
  3. 如果 PC 代码路径通过 WinHTTP 查询代理设置,请等待异步结果完成后再调用 WinHttpGetProxySettingsResultEx 并应用返回的代理值。
  4. 如果你在 XBOX 上面向更早的 GDK,或使用不消费 XBOX 特定代理设置路径的堆栈,请在游戏中手动设置代理地址和端口。
  5. 如果你使用 Schannel,可依赖由主机应用的证书。如果你使用 OpenSSL 或其他堆栈,请从证书存储中检索所用调试工具对应的证书并显式加载。

相关页面

最后修改于 2026年8月24日