CFNetworkCopyProxiesForURL が返す PAC URL を評価する
PAC アドレスをプロキシのエンドポイントと取り違えずに、CFNetwork の自動プロキシ構成の結果を宛先ごとのルートに変換します。
アプリケーションが CFNetwork にウェブサイトへの到達方法を問い合わせると、.pac で終わる URL が返ります。そのホスト名をソケット接続に渡すのは誤りです。それは構成スクリプトを指しています。
CFNetworkCopyProxiesForURL は対象 URL に対する辞書の順序付き配列を返します。エンドポイントのフィールドを読む前に kCFProxyTypeKey を確認してください。kCFProxyTypeAutoConfigurationURL 型の辞書は kCFProxyAutoConfigurationURLKey を提供し、これにはもう一段の評価が必要です。
- 現在のシステムプロキシ設定を取得し、実際の宛先 URL へのルートを要求します。
- 結果が PAC URL を参照している場合は、そのスクリプトを同じ宛先について評価します。
- 得られた候補の種類とエンドポイントを読み取ります。HTTP プロキシ、SOCKS プロキシ、直接ルートでは接続の扱いが異なります。
- 許容される失敗とフォールバックの動作を適用する際は、候補の順序を保ってください。
CFNetworkExecuteProxyAutoConfigurationURL はスクリプトを非同期にダウンロードして評価します。その即時の戻り値は run loop のソースです。そのソースをスケジュールしてください。処理が完了するとコールバックが評価結果またはエラーを渡します。ソースを作成して空の結果変数をすぐ読んでも何も待ちません。操作を中止する必要がある場合はソースを無効化します。
対象 URL をルックアップに結び付けたままにしてください。PAC スクリプトは 2 つのホストに対して異なるルートを選べるため、解決済みのプロキシを 1 つだけ保存して以降のすべての宛先への答えにすると、スクリプトの方針が変わってしまいます。同様に、直接候補は明示的なルートであり、プロキシホスト名の欠落ではありません。
これらの API は、独自のトランスポートがシステム設定を解釈する必要がある場合に役立ちます。そのトランスポート向けの後続のプロキシプロトコルは実装しておらず、ルックアップは Keychain からパスワードを取得しません。macOS では、Keychain のプロキシ資格情報を別途照合してください。