Se o Jint relata que dnsResolve ou myIpAddress está ausente durante a avaliação do PAC, carregar mais JavaScript não é necessariamente a solução. Esses helpers de PAC pertencem ao ambiente fornecido pelo aplicativo host.

Antes de chamar FindProxyForURL

Escolha o conjunto de helpers de PAC suportado e as famílias de endereços e, em seguida, instale esses helpers no motor. Preserve seus contratos: dnsResolve recebe um nome de host, myIpAddress não recebe argumentos e exige uma política de interface local, e shExpMatch usa padrões no estilo shell. Um stub que devolve um valor conveniente pode escolher a rota errada silenciosamente.

Feita essa inicialização, a chamada principal pode ter esta aparência no Jint 4.4.0:

var destination = new Uri(destinationUrl);
engine.Execute(pacSource);
var routeList = engine.Invoke(
    "FindProxyForURL",
    destinationUrl,
    destination.IdnHost
).AsString();

engine é o Jint.Engine configurado; pacSource é o programa PAC obtido. destination.IdnHost fornece o nome do host sem porta nem caminho. Esta chamada não obtém o PAC nem abre uma conexão proxy.

Depois da chamada

Interprete um resultado como PROXY proxy.example:8080; DIRECT como uma lista ordenada de candidatos de rota e fallback. Passar a string inteira como URL de proxy perde o significado. Mantenha uma falha de avaliação distinta de um resultado DIRECT explícito.

Enquanto ele executa

Configure os limites de duração, instruções, memória e cancelamento do Jint e exponha apenas as funções de host necessárias. Limite os callbacks de DNS separadamente: verificações de execução de JavaScript não tornam interrompível uma chamada de host bloqueante arbitrária. Serialize o acesso a um motor ou dê ao trabalho concorrente instâncias com propriedade separada; motores não são seguros para uso simultâneo.

As implementações de PAC dos navegadores podem diferir em extensões de helpers e nos detalhes de URL que expõem, especialmente para HTTPS. Corresponder a um resultado de amostra prova menos do que corresponder ao comportamento de roteamento do navegador.

Artigos relacionados