إذا أبلغ Jint عن غياب dnsResolve أو myIpAddress أثناء تقييم PAC، فتحميل مزيد من JavaScript ليس بالضرورة هو الحل. فتلك المساعدات تخص البيئة التي يوفرها التطبيق المضيف.

قبل استدعاء FindProxyForURL

اختر مجموعة مساعدات PAC المدعومة وعائلات العناوين، ثم ثبّت تلك المساعدات على المحرك. حافظ على عقودها: dnsResolve يأخذ اسم مضيف، وmyIpAddress لا يأخذ وسائط ويحتاج إلى سياسة واجهة محلية، وshExpMatch يستخدم أنماطًا شبيهة بأنماط الصدفة. والبديل الوهمي الذي يعيد قيمة مريحة قد يختار المسار الخطأ بصمت.

بعد إتمام ذلك التهيئة، قد يبدو الاستدعاء الأساسي هكذا في 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. ومطابقة نتيجة نموذج واحدة تُثبت أقل من مطابقة سلوك التوجيه في المتصفح.

مقالات ذات صلة