Синтаксический анализ скрипта конфигурации автозаказки в.Net/C#

Чтобы мое приложение (.Net 1.1) использовало прокси-сервер, настроенный системой (через сценарий proxy.pac), я использовал вызовы взаимодействия для WinHTTP-функции WinHttpGetProxyForUrl, передавая URL-адрес proxy.pac, полученный из реестра.

К сожалению, я столкнулся со сценарием развертывания, где это не работает, поскольку файл proxy.pac развертывается локально на жестком диске пользователя, а URL-адрес - "file://C://xxxx".

Как четко указано в документации WinHttpGetProxyForUrl, он работает только со схемами http и https, поэтому не работает с файлом: //

Я рассматриваю 2 "некрасивых" решения проблемы (pac-файл - javascript):

  1. Создание отдельного проекта JScript.NET с одним классом с одним статическим методом Eval(строка) и использование его для оценки во время выполнения функции, прочитанной из файла pac

  2. Сборка во время выполнения сборки JScript.NET и загрузка ее.

Поскольку эти решения действительно ужасны:), кто-нибудь знает лучший подход? Есть ли функция Windows, которую я могу использовать через взаимодействие?

Если нет, то что вы думаете о двух вышеуказанных решениях - какое из них вы бы предпочли?

4 ответа

Решение

Просто мысль: почему бы не создать микро-веб-сервер, который может обслуживать локальный файл PAC через сокет localhost. Вы должны использовать случайный URI для контента, чтобы было трудно просматривать его непредвиденными способами.

Затем можно передать URL-адрес, например http://localhost:1234/gfdjklskjgfsdjgklsdfklgfsjkl в функцию WinHttpGetProxyForUrl и разрешить ему извлекать файл PAC с вашего микро-сервера.

(взломать... взломать... взломать...)

FWIW: https://web.archive.org/web/20150405115150/http://msdn.microsoft.com/en-us/magazine/cc300743.aspx описывает, как использовать механизм JScript.NET, чтобы сделать это безопасно.

https://web.archive.org/web/20090220132508/http://msdn.microsoft.com/en-us/library/aa383910(VS.85).aspx объясняет, как использовать реализацию WinINET.

К сожалению, я не могу ответить на вашу проблему (хотя несколько лет назад я играл с jscript.net, и было бы всего несколько строк, чтобы построить и запустить таким образом)

Некоторое время назад я натолкнулся на аналогичный сбой proxy.pac с личным файлом для обхода служебных прокси - в конце концов я выбрал самый простой вариант и поместил его на свой собственный сайт IIS, и он отлично работал и работает безупречно со всем на моем компьютере.

Иногда лучше всего сдаться и работать с тем, что предусмотрено:)

Я не могу ответить на ваш вопрос напрямую, но из-за реализации mozilla возникла определенная дискуссия о поддержке файловых URL. Это был сетевой контроль против дебатов об удобстве локального пользователя.

Другие вопросы по тегам