Android API 29 引入了 VpnService.Builder.setHttpProxy,用于把 HTTP 代理建议附加到 VPN 网络。在现有的 VPN 服务中,在建立其已配置的接口之前:

builder.setHttpProxy(
    ProxyInfo.buildDirectProxy("proxy.example", 8080));

这里的 builder 是该服务的 VpnService.Builder,ProxyInfo 是 android.net.ProxyInfo。请分别提供代理的主机和端口。此代码片段把代理信息添加到一个其他 VPN 参数已配置好的 builder 上。

此 API 不支持 PAC 代理。从 PAC URI 创建 ProxyInfo 并不会使其成为受支持的 VPN 代理配置;请使用可访问的直接 HTTP 代理端点。对于允许的公共流量,HTTP 代理列表 提供主机和端口候选,其可达性必须在 VPN 的路由安排下检查。

该设置是建议性的。应用可能忽略它,因此它无法保证每个连接都使用该代理。在拆分隧道中,遵循该建议的应用还可能尝试通过该代理发送发往 VPN 之外目标的 HTTP 请求。这些应用在应用代理信息时无法区分这两个路由组。在把该设置视为完整之前,请检查中间节点在该路由安排下的可达性。

相关文章