Rust headless_chrome: ナビゲーション前に HTTP プロキシ資格情報を設定する
ブラウザ起動時に HTTP プロキシを選び、ナビゲーション前に headless_chrome のタブで Fetch 認証を有効にします。
Rust の headless_chrome クレートでは、ブラウザの起動設定が 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 の第 2 引数は認証イベントを有効にします。Chromium は --proxy-server に埋め込まれたユーザー情報をこの資格情報のやり取りとは見なしません。
処理の間はブラウザとタブを生かしておきます。独自の Fetch 傍受も導入している場合は、一時停止したリクエストを誰が再開し、チャレンジに誰が応答するかを決めてください。未解決のまま止まったリクエストはナビゲーションを止めることがあります。
この単純なタブ認証は、想定されたプロキシのチャレンジを前提としています。無関係なオリジンの認証を伴う処理では、中間者のアカウントをすべてのサーバーに使い回すのではなく、チャレンジの範囲を明示する必要があります。Chromium の SOCKS5 におけるユーザー名とパスワードの制限も、この HTTP 認証の経路とは別です。