Dacă Jint raportează că lipsește dnsResolve sau myIpAddress în timpul evaluării PAC, încărcarea mai mult JavaScript nu este neapărat soluția. Acele ajutoare PAC aparțin mediului oferit de aplicația gazdă.

Înainte de a apela FindProxyForURL

Alegeți setul de ajutoare PAC acceptat și familiile de adrese, apoi instalați acele ajutoare în motor. Păstrați-le contractele: dnsResolve primește un nume de gazdă, myIpAddress nu primește argumente și are nevoie de o politică pentru interfața locală, iar shExpMatch folosește modele în stil shell. Un stub care returnează o valoare convenabilă poate alege în silențiu ruta greșită.

După această inițializare, apelul principal poate arăta astfel în Jint 4.4.0:

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

engine este Jint.Engine configurat; pacSource este programul PAC obținut. destination.IdnHost furnizează numele gazdei fără port sau cale. Acest apel nici nu obține PAC, nici nu deschide o conexiune proxy.

După apel

Interpretați un rezultat precum PROXY proxy.example:8080; DIRECT ca o listă ordonată de candidați de rută și rezervă. Transmiterea întregului șir ca URL de proxy îi pierde sensul. Păstrați o eroare de evaluare distinctă de un rezultat DIRECT explicit.

În timpul execuției

Configurați limitele Jint pentru durată, instrucțiuni, memorie și anulare și expuneți doar funcțiile de gazdă necesare. Limitați separat apelurile inverse DNS: verificările execuției JavaScript nu fac un apel de gazdă blocant arbitrar întreruptibil. Serializați accesul la un motor sau dați lucrului concurent instanțe deținute separat; motoarele nu sunt sigure pentru utilizare simultană.

Implementările PAC ale browserelor pot diferi în extensiile ajutoarelor și în detaliile URL pe care le expun, mai ales pentru HTTPS. Potrivirea unui rezultat de probă dovedește mai puțin decât potrivirea comportamentului de rutare al browserului.

Articole similare