Оценка на PAC URL адговори от CFNetworkCopyProxiesForURL
Превръщайте резултатите от автоматичното конфигуриране на прокси в CFNetwork в маршрути за конкретна дестинация, без да бъркате PAC адреса с крайната точка на прокси.
Приложението ви пита CFNetwork как да достигне до сайт и получава URL, завършващ на .pac. Поставянето на това име на хост в socket връзката е погрешен завой: то идентифицира конфигурационен скрипт.
CFNetworkCopyProxiesForURL връща подреден масив от речници за целевия URL. Проверете kCFProxyTypeKey, преди да четете полетата на крайната точка. Речник от тип kCFProxyTypeAutoConfigurationURL предоставя kCFProxyAutoConfigurationURLKey, което изисква още една стъпка на оценка.
- Вземете текущите системни настройки за прокси и поискайте маршрути до действителния URL на дестинацията.
- Когато резултат сочи към PAC URL, оценете този скрипт за същата дестинация.
- Прочетете получените типове кандидати и крайни точки. HTTP прокси, SOCKS прокси и директен маршрут изискват различна обработка на връзката.
- Запазете реда на кандидатите, когато прилагате разрешеното поведение при неуспех и връщане назад.
CFNetworkExecuteProxyAutoConfigurationURL изтегля и оценява скрипта асинхронно. Непосредствената му върната стойност е източник за цикъл на събития. Планирайте този източник; callback-ът дава резултата от оценката или грешка, след като работата приключи. Създаването на източника и незабавното четене на празна променлива за резултат не изчаква нищо. Анулирайте източника, ако операцията трябва да бъде отменена.
Дръжте целевия URL свързан с търсенето. PAC скрипт може да избере различни маршрути за два хоста, така че запазването на едно разрешено прокси като отговор за всяка следваща дестинация променя политиката на скрипта. По същия начин директният кандидат е явен маршрут, а не липсващо име на прокси хост.
Тези API са полезни, когато персонализиран транспорт трябва да интерпретира системни настройки. Те не реализират следващия прокси протокол за този транспорт и търсенето не извлича пароли от Keychain. В macOS съпоставете прокси идентификационните данни в Keychain отделно.