Meldet Jint beim Auswerten von PAC einen fehlenden dnsResolve oder myIpAddress, ist das Nachladen von weiterem JavaScript nicht zwangsläufig die Lösung. Diese PAC-Helfer gehören zur Umgebung, die die Hostanwendung bereitstellt.

Vor dem Aufruf von FindProxyForURL

Wählen Sie die unterstützte PAC-Helfersammlung und Adressfamilien und installieren Sie diese Helfer dann in der Engine. Achten Sie auf ihre Verträge: dnsResolve nimmt einen Hostnamen, myIpAddress nimmt keine Argumente und braucht eine Richtlinie für lokale Schnittstellen, und shExpMatch verwendet Muster im Shell-Stil. Ein Stub, der einen bequemen Wert zurückgibt, kann stillschweigend die falsche Route wählen.

Nach dieser Initialisierung kann der Kernaufruf in Jint 4.4.0 so aussehen:

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

engine ist die konfigurierte Jint.Engine; pacSource ist das abgerufene PAC-Programm. destination.IdnHost liefert den Hostnamen ohne Port oder Pfad. Dieser Aufruf ruft kein PAC ab und öffnet keine Proxyverbindung.

Nach dem Aufruf

Deuten Sie ein Ergebnis wie PROXY proxy.example:8080; DIRECT als geordnete Liste von Routenkandidaten und Rückfall. Wird die ganze Zeichenkette als Proxy-URL übergeben, geht ihre Bedeutung verloren. Halten Sie einen Auswertungsfehler von einem ausdrücklichen DIRECT-Ergebnis getrennt.

Während der Ausführung

Konfigurieren Sie Jints Grenzen für Dauer, Anweisungen, Speicher und Abbruch und legen Sie nur die benötigten Hostfunktionen offen. Begrenzen Sie DNS-Rückrufe gesondert: Prüfungen der JavaScript-Ausführung machen einen beliebigen blockierenden Hostaufruf nicht unterbrechbar. Serialisieren Sie den Zugriff auf eine Engine oder geben Sie gleichzeitiger Arbeit getrennt gehörende Instanzen; Engines sind für gleichzeitige Nutzung nicht sicher.

PAC-Implementierungen in Browsern können sich bei Helfererweiterungen und den offengelegten URL-Details unterscheiden, besonders bei HTTPS. Ein einzelnes Beispielergebnis zu treffen belegt weniger, als das Routingverhalten des Browsers zu treffen.

Ähnliche Artikel