Avaliar os URL PAC retornados por CFNetworkCopyProxiesForURL
Converta os resultados da configuração automática de proxy do CFNetwork em rotas específicas por destino sem confundir o endereço PAC com o ponto de extremidade do proxy.
A sua aplicação pergunta ao CFNetwork como chegar a um site e recebe um URL que termina em .pac. Colocar esse nome de host na ligação socket é o caminho errado: ele identifica um script de configuração.
CFNetworkCopyProxiesForURL devolve uma matriz ordenada de dicionários para o URL de destino. Inspecione kCFProxyTypeKey antes de ler os campos do ponto de extremidade. Um dicionário do tipo kCFProxyTypeAutoConfigurationURL fornece kCFProxyAutoConfigurationURLKey, que exige outro passo de avaliação.
- Obtenha as definições de proxy atuais do sistema e peça rotas para o URL de destino real.
- Quando um resultado se referir a um URL PAC, avalie esse script para o mesmo destino.
- Leia os tipos e pontos de extremidade dos candidatos resultantes. Um proxy HTTP, um proxy SOCKS e uma rota direta exigem tratamento de ligação diferente.
- Preserve a ordem dos candidatos ao aplicar o comportamento permitido de falha e de recurso.
CFNetworkExecuteProxyAutoConfigurationURL transfere e avalia o script de forma assíncrona. O seu valor de retorno imediato é uma fonte de run loop. Agende essa fonte; a chamada de retorno fornece o resultado da avaliação ou o erro depois de o trabalho terminar. Criar a fonte e ler imediatamente uma variável de resultado vazia não espera por nada. Invalide a fonte se a operação tiver de ser cancelada.
Mantenha o URL de destino associado à consulta. Um script PAC pode escolher rotas diferentes para dois hosts, por isso guardar um único proxy resolvido como resposta para cada destino seguinte altera a política do script. Do mesmo modo, um candidato direto é uma rota explícita, não um nome de host de proxy em falta.
Estas API são úteis quando um transporte personalizado tem de interpretar as definições do sistema. Não implementam o protocolo de proxy seguinte para esse transporte, e a consulta não obtém palavras-passe do Keychain. No macOS, faça corresponder separadamente a credencial de proxy no Keychain.