在 Rust 的 headless_chrome crate 中,浏览器启动设置负责选择 HTTP 中间人。标签页的 Fetch 处理器会在 Chromium 请求时提供账号:

let proxy = "http://proxy.example:8080";
let options = headless_chrome::LaunchOptions::default_builder()
    .proxy_server(Some(proxy))
    .build()?;
let browser = headless_chrome::Browser::new(options)?;
let tab = browser.new_tab()?;

tab.enable_fetch(None, Some(true))?;
tab.authenticate(Some(proxy_user), Some(proxy_password))?;
tab.navigate_to("https://www.example.org/")?;
tab.wait_until_navigated()?;

外层函数向上传递错误,proxy_user 与 proxy_password 是来自应用现有账号配置的 String 值。要在导航触发质询之前完成认证设置。

enable_fetch 的第二个参数开启认证事件。Chromium 不会把 --proxy-server 中内嵌的用户信息当作这次凭据交换。

在整个作业期间保持浏览器和标签页存活。如果同时安装了自定义 Fetch 拦截,要明确由谁继续被暂停的请求、由谁应答质询;未解决的暂停请求可能卡住导航。

这个简单的标签页认证假定的就是预期的代理质询。涉及无关源认证的流程需要 显式限定质询范围,而不是对每个服务器都复用中间人账号。Chromium 在 SOCKS5 上对用户名和密码的限制同样与这条 HTTP 认证路径无关。

相关文章