アプリケーションが CFNetwork にウェブサイトへの到達方法を問い合わせると、.pac で終わる URL が返ります。そのホスト名をソケット接続に渡すのは誤りです。それは構成スクリプトを指しています。

CFNetworkCopyProxiesForURL は対象 URL に対する辞書の順序付き配列を返します。エンドポイントのフィールドを読む前に kCFProxyTypeKey を確認してください。kCFProxyTypeAutoConfigurationURL 型の辞書は kCFProxyAutoConfigurationURLKey を提供し、これにはもう一段の評価が必要です。

  1. 現在のシステムプロキシ設定を取得し、実際の宛先 URL へのルートを要求します。
  2. 結果が PAC URL を参照している場合は、そのスクリプトを同じ宛先について評価します。
  3. 得られた候補の種類とエンドポイントを読み取ります。HTTP プロキシ、SOCKS プロキシ、直接ルートでは接続の扱いが異なります。
  4. 許容される失敗とフォールバックの動作を適用する際は、候補の順序を保ってください。

CFNetworkExecuteProxyAutoConfigurationURL はスクリプトを非同期にダウンロードして評価します。その即時の戻り値は run loop のソースです。そのソースをスケジュールしてください。処理が完了するとコールバックが評価結果またはエラーを渡します。ソースを作成して空の結果変数をすぐ読んでも何も待ちません。操作を中止する必要がある場合はソースを無効化します。

対象 URL をルックアップに結び付けたままにしてください。PAC スクリプトは 2 つのホストに対して異なるルートを選べるため、解決済みのプロキシを 1 つだけ保存して以降のすべての宛先への答えにすると、スクリプトの方針が変わってしまいます。同様に、直接候補は明示的なルートであり、プロキシホスト名の欠落ではありません。

これらの API は、独自のトランスポートがシステム設定を解釈する必要がある場合に役立ちます。そのトランスポート向けの後続のプロキシプロトコルは実装しておらず、ルックアップは Keychain からパスワードを取得しません。macOS では、Keychain のプロキシ資格情報を別途照合してください。

関連記事