Se Jint segnala un dnsResolve o un myIpAddress mancante durante la valutazione di PAC, caricare più JavaScript non è necessariamente la soluzione. Quegli helper PAC appartengono all'ambiente fornito dall'applicazione host.

Prima di chiamare FindProxyForURL

Scegliere l'insieme di helper PAC supportato e le famiglie di indirizzi, poi installare quegli helper sul motore. Rispettarne i contratti: dnsResolve accetta un nome host, myIpAddress non accetta argomenti e richiede una politica per l'interfaccia locale, e shExpMatch usa schemi in stile shell. Uno stub che restituisce un valore comodo può scegliere in silenzio la rotta sbagliata.

Fatta questa inizializzazione, la chiamata principale può apparire così in Jint 4.4.0:

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

engine è il Jint.Engine configurato; pacSource è il programma PAC recuperato. destination.IdnHost fornisce il nome host senza porta né percorso. Questa chiamata non recupera il PAC né apre una connessione proxy.

Dopo la chiamata

Interpretare un risultato come PROXY proxy.example:8080; DIRECT come un elenco ordinato di candidati di rotta e fallback. Passare l'intera stringa come URL di proxy ne fa perdere il significato. Tenere distinto un errore di valutazione da un risultato DIRECT esplicito.

Durante l'esecuzione

Configurare i limiti di Jint su durata, istruzioni, memoria e annullamento ed esporre solo le funzioni host necessarie. Limitare separatamente le callback DNS: i controlli di esecuzione JavaScript non rendono interrompibile una chiamata host bloccante arbitraria. Serializzare l'accesso a un motore o assegnare al lavoro concorrente istanze possedute separatamente; i motori non sono sicuri per l'uso simultaneo.

Le implementazioni PAC dei browser possono differire nelle estensioni degli helper e nei dettagli URL che espongono, soprattutto per HTTPS. Corrispondere a un solo risultato di esempio dimostra meno che corrispondere al comportamento di instradamento del browser.

Articoli correlati