Vom CFNetworkCopyProxiesForURL zurückgegebene PAC-URLs auswerten
Verwandeln Sie die Ergebnisse der automatischen Proxykonfiguration von CFNetwork in zielgenaue Routen, ohne die PAC-Adresse mit dem Proxy-Endpunkt zu verwechseln.
Ihre Anwendung fragt CFNetwork, wie eine Website zu erreichen ist, und erhält eine URL, die auf .pac endet. Diesen Hostnamen in die Socket-Verbindung einzusetzen, ist eine falsche Abbiegung: Er kennzeichnet ein Konfigurationsskript.
CFNetworkCopyProxiesForURL liefert ein geordnetes Array von Dictionaries für die Ziel-URL. Prüfen Sie kCFProxyTypeKey, bevor Sie Endpunktfelder lesen. Ein Dictionary vom Typ kCFProxyTypeAutoConfigurationURL enthält kCFProxyAutoConfigurationURLKey, was einen weiteren Auswertungsschritt erfordert.
- Holen Sie die aktuellen System-Proxy-Einstellungen ein und fragen Sie nach Routen zur tatsächlichen Ziel-URL.
- Wenn ein Ergebnis auf eine PAC-URL verweist, werten Sie dieses Skript für dasselbe Ziel aus.
- Lesen Sie die resultierenden Kandidatentypen und Endpunkte. Ein HTTP-Proxy, ein SOCKS-Proxy und eine direkte Route erfordern unterschiedliche Verbindungsbehandlung.
- Behalten Sie die Reihenfolge der Kandidaten bei, wenn Sie das erlaubte Fehler- und Fallback-Verhalten anwenden.
CFNetworkExecuteProxyAutoConfigurationURL lädt das Skript herunter und wertet es asynchron aus. Der unmittelbare Rückgabewert ist eine Run-Loop-Quelle. Planen Sie diese Quelle ein; der Callback liefert das Auswertungsergebnis oder einen Fehler, sobald die Arbeit abgeschlossen ist. Die Quelle zu erzeugen und sofort eine leere Ergebnisvariable zu lesen, wartet auf nichts. Machen Sie die Quelle ungültig, wenn der Vorgang abgebrochen werden muss.
Halten Sie die Ziel-URL an die Abfrage gebunden. Ein PAC-Skript kann für zwei Hosts unterschiedliche Routen wählen; einen aufgelösten Proxy als Antwort für jedes weitere Ziel zu speichern, ändert daher die Richtlinie des Skripts. Ebenso ist ein direkter Kandidat eine ausdrückliche Route und kein fehlender Proxy-Hostname.
Diese APIs sind nützlich, wenn ein eigener Transport die Systemeinstellungen interpretieren muss. Sie implementieren nicht das anschließende Proxy-Protokoll für diesen Transport, und die Abfrage holt keine Passwörter aus dem Keychain. Unter macOS gleichen Sie die Proxy-Anmeldedaten separat im Keychain ab.