Nếu Jint báo thiếu dnsResolve hoặc myIpAddress khi đánh giá PAC, nạp thêm JavaScript không hẳn là cách khắc phục. Các hàm trợ giúp PAC đó thuộc về môi trường do ứng dụng máy chủ cung cấp.

Trước khi gọi FindProxyForURL

Chọn bộ hàm trợ giúp PAC được hỗ trợ và các họ địa chỉ, sau đó cài các hàm trợ giúp đó vào engine. Giữ nguyên hợp đồng của chúng: dnsResolve nhận một tên máy chủ, myIpAddress không nhận đối số và cần chính sách giao diện cục bộ, còn shExpMatch dùng mẫu kiểu shell. Một stub trả về giá trị thuận tiện có thể âm thầm chọn sai tuyến.

Sau khi khởi tạo đó, lệnh gọi cốt lõi có thể trông như sau trong Jint 4.4.0:

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

engine là Jint.Engine đã cấu hình; pacSource là chương trình PAC đã lấy. destination.IdnHost cung cấp tên máy chủ không có cổng hay đường dẫn. Lệnh gọi này không lấy PAC và không mở kết nối proxy.

Sau lệnh gọi

Hãy diễn giải kết quả như PROXY proxy.example:8080; DIRECT thành danh sách ứng viên tuyến và dự phòng có thứ tự. Truyền cả chuỗi đó làm URL proxy sẽ làm mất ý nghĩa. Giữ lỗi đánh giá tách biệt với kết quả DIRECT rõ ràng.

Trong khi nó chạy

Cấu hình các giới hạn về thời lượng, câu lệnh, bộ nhớ và hủy của Jint, và chỉ để lộ các hàm máy chủ cần thiết. Giới hạn riêng các callback DNS: các kiểm tra thực thi JavaScript không làm cho một lệnh gọi máy chủ chặn tùy ý có thể bị ngắt. Tuần tự hóa truy cập vào một engine hoặc cấp cho công việc đồng thời các phiên bản thuộc sở hữu riêng; engine không an toàn khi dùng đồng thời.

Các triển khai PAC của trình duyệt có thể khác nhau về phần mở rộng hàm trợ giúp và chi tiết URL mà chúng để lộ, đặc biệt với HTTPS. Khớp với một kết quả mẫu chứng minh ít hơn khớp với hành vi định tuyến của trình duyệt.

Bài viết liên quan