Ако Jint съобщи за липсващ dnsResolve или myIpAddress при оценка на PAC, зареждането на още JavaScript не е непременно решението. Тези PAC помощници принадлежат към средата, която предоставя хостващото приложение.

Преди извикване на FindProxyForURL

Изберете поддържания набор PAC помощници и семейства адреси, след което инсталирайте тези помощници в двигателя. Запазете техните договори: dnsResolve приема име на хост, myIpAddress не приема аргументи и изисква политика за локален интерфейс, а shExpMatch използва шаблони в стил shell. Заглушка, връщаща удобна стойност, може тихо да избере грешен маршрут.

След тази инициализация основното извикване в Jint 4.4.0 може да изглежда така:

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

engine е конфигурираният Jint.Engine; pacSource е извлечената PAC програма. destination.IdnHost подава името на хоста без порт или път. Това извикване нито извлича PAC, нито отваря прокси връзка.

След извикването

Тълкувайте резултат като PROXY proxy.example:8080; DIRECT като подреден списък от кандидати за маршрут и резервен вариант. Предаването на целия низ като прокси URL губи смисъла му. Разграничавайте неуспеха при оценка от явен резултат DIRECT.

Докато работи

Конфигурирайте ограниченията на Jint за продължителност, оператори, памет и отказ, и излагайте само необходимите хост функции. Ограничете DNS обратните извиквания отделно: проверките за изпълнение на JavaScript не правят произволно блокиращо хост извикване прекъсваемо. Сериализирайте достъпа до двигател или давайте на паралелната работа отделно притежавани инстанции; двигателите не са безопасни за едновременна употреба.

Браузърните PAC реализации могат да се различават по разширения на помощниците и подробностите за URL, които разкриват, особено при HTTPS. Съвпадението с един примерен резултат доказва по-малко от съвпадението с маршрутизиращото поведение на браузъра.

Подобни статии