Évaluer les URL PAC renvoyées par CFNetworkCopyProxiesForURL
Transformez les résultats de configuration automatique du proxy de CFNetwork en routes propres à chaque destination sans confondre l'adresse PAC avec le point de terminaison du proxy.
Votre application demande à CFNetwork comment joindre un site web et reçoit une URL se terminant par .pac. Placer ce nom d'hôte dans la connexion socket est une fausse route : il désigne un script de configuration.
CFNetworkCopyProxiesForURL renvoie un tableau ordonné de dictionnaires pour l'URL cible. Inspectez kCFProxyTypeKey avant de lire les champs du point de terminaison. Un dictionnaire de type kCFProxyTypeAutoConfigurationURL fournit kCFProxyAutoConfigurationURLKey, qui exige une étape d'évaluation supplémentaire.
- Obtenez les réglages de proxy actuels du système et demandez les routes vers l'URL de destination réelle.
- Lorsqu'un résultat renvoie à une URL PAC, évaluez ce script pour la même destination.
- Lisez les types et points de terminaison des candidats obtenus. Un proxy HTTP, un proxy SOCKS et une route directe demandent une gestion de connexion différente.
- Conservez l'ordre des candidats lorsque vous appliquez le comportement autorisé d'échec et de repli.
CFNetworkExecuteProxyAutoConfigurationURL télécharge et évalue le script de façon asynchrone. Sa valeur de retour immédiate est une source de run loop. Planifiez cette source ; le rappel fournit le résultat de l'évaluation ou l'erreur une fois le travail terminé. Créer la source puis lire immédiatement une variable de résultat vide n'attend rien. Invalidez la source si l'opération doit être annulée.
Gardez l'URL cible attachée à la requête. Un script PAC peut choisir des routes différentes pour deux hôtes ; stocker un seul proxy résolu comme réponse pour toutes les destinations suivantes modifie la politique du script. De même, un candidat direct est une route explicite, et non un nom d'hôte de proxy manquant.
Ces API sont utiles lorsqu'un transport personnalisé doit interpréter les réglages du système. Elles n'implémentent pas le protocole de proxy qui suit pour ce transport, et la requête ne récupère pas les mots de passe depuis le Keychain. Sur macOS, faites correspondre séparément l'identifiant du proxy dans le Keychain.