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.

  1. Obtenha as definições de proxy atuais do sistema e peça rotas para o URL de destino real.
  2. Quando um resultado se referir a um URL PAC, avalie esse script para o mesmo destino.
  3. 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.
  4. 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.

Artigos relacionados