Evaluar las URL PAC que devuelve CFNetworkCopyProxiesForURL
Convierta los resultados de configuración automática de proxy de CFNetwork en rutas específicas para cada destino sin confundir la dirección PAC con el extremo del proxy.
Su aplicación pregunta a CFNetwork cómo llegar a un sitio web y recibe una URL que termina en .pac. Colocar ese nombre de host en la conexión de socket es un camino equivocado: identifica un script de configuración.
CFNetworkCopyProxiesForURL devuelve una matriz ordenada de diccionarios para la URL de destino. Revise kCFProxyTypeKey antes de leer los campos del extremo. Un diccionario de tipo kCFProxyTypeAutoConfigurationURL proporciona kCFProxyAutoConfigurationURLKey, que requiere otro paso de evaluación.
- Obtenga la configuración de proxy actual del sistema y solicite rutas hacia la URL de destino real.
- Cuando un resultado haga referencia a una URL PAC, evalúe ese script para el mismo destino.
- Lea los tipos y extremos de los candidatos resultantes. Un proxy HTTP, un proxy SOCKS y una ruta directa requieren un manejo de conexión distinto.
- Conserve el orden de los candidatos al aplicar el comportamiento permitido de fallo y respaldo.
CFNetworkExecuteProxyAutoConfigurationURL descarga y evalúa el script de forma asíncrona. Su valor de retorno inmediato es una fuente de run loop. Programe esa fuente; la devolución de llamada entrega el resultado de la evaluación o el error después de completar el trabajo. Crear la fuente y leer de inmediato una variable de resultado vacía no espera nada. Invalide la fuente si la operación debe cancelarse.
Mantenga la URL de destino asociada a la consulta. Un script PAC puede elegir rutas distintas para dos hosts, así que guardar un único proxy resuelto como respuesta para cada destino posterior cambia la política del script. De igual modo, un candidato directo es una ruta explícita, no un nombre de host de proxy ausente.
Estas API son útiles cuando un transporte personalizado debe interpretar la configuración del sistema. No implementan el protocolo de proxy posterior para ese transporte, y la consulta no recupera contraseñas del Keychain. En macOS, haga coincidir la credencial del proxy en el Keychain por separado.