在 CEF 请求上下文上设置代理
通过受支持的偏好设置 API 为一个 CEF 浏览器上下文指定固定代理,并确认启动策略是否允许该改动。
在目标 CefRequestContext 初始化之后,于浏览器进程的 UI 线程上、开始浏览工作之前设置它的代理偏好:
auto rule = CefDictionaryValue::Create();
rule->SetString("mode", "fixed_servers");
rule->SetString("server", "http://proxy.example:8080");
auto value = CefValue::Create();
value->SetDictionary(rule);
CefString error;
bool configured = context->SetPreference("proxy", value, error);检查 configured,失败时保留错误信息。CanSetPreference 表示该偏好是否允许用户修改;启动时的命令行选择可能使其无法通过此接口更改。
创建浏览器时传入同一个上下文。已配置但未使用的上下文不会影响运行在全局上下文上的浏览器。
还要检查隔离性。上下文之间可能通过共享缓存路径或显式关系共享底层存储或网络状态。IsSharingWith 是检查这种共享的受支持方式。相互独立的代理会话需要各自选定的上下文和存储策略。
该偏好只影响后续工作,无法移动已有的隧道。导航 URL 仍是目标地址,偏好中的服务器则是中间人。在未配置代理认证、且允许公开浏览的情况下,HTTP 代理列表可以提供候选的 HTTP 服务器值。如果启动开关有意掌控路由,就维持该策略,而不要指望之后的偏好写入将其覆盖。受支持的请求上下文 API 还避免了重建已被移除的 CefProxyHandler。