Si Jint signale un dnsResolve ou un myIpAddress manquant pendant l'évaluation du PAC, charger davantage de JavaScript n'est pas forcément la solution. Ces assistants PAC appartiennent à l'environnement fourni par l'application hôte.

Avant d'appeler FindProxyForURL

Choisissez l'ensemble d'assistants PAC pris en charge et les familles d'adresses, puis installez ces assistants sur le moteur. Respectez leurs contrats : dnsResolve prend un nom d'hôte, myIpAddress ne prend aucun argument et exige une politique d'interface locale, et shExpMatch utilise des motifs de style shell. Un substitut qui renvoie une valeur commode peut choisir silencieusement la mauvaise route.

Une fois cette initialisation faite, l'appel central peut ressembler à ceci dans Jint 4.4.0 :

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

engine est le Jint.Engine configuré ; pacSource est le programme PAC récupéré. destination.IdnHost fournit le nom d'hôte sans port ni chemin. Cet appel ne récupère pas le PAC et n'ouvre pas de connexion proxy.

Après l'appel

Interprétez un résultat comme PROXY proxy.example:8080; DIRECT comme une liste ordonnée de candidats de route et de repli. Transmettre toute la chaîne comme URL de proxy lui fait perdre son sens. Distinguez un échec d'évaluation d'un résultat DIRECT explicite.

Pendant l'exécution

Configurez les limites de durée, d'instructions, de mémoire et d'annulation de Jint, et n'exposez que les fonctions hôtes nécessaires. Bornez les rappels DNS séparément : les contrôles d'exécution JavaScript ne rendent pas interruptible un appel hôte bloquant arbitraire. Sérialisez l'accès à un moteur ou donnez au travail concurrent des instances possédées séparément ; les moteurs ne sont pas sûrs pour un usage simultané.

Les implémentations PAC des navigateurs peuvent différer par les extensions d'assistants et les détails d'URL qu'elles exposent, surtout pour HTTPS. Correspondre à un seul résultat d'exemple prouve moins que correspondre au comportement de routage du navigateur.

Articles similaires