Синтаксический анализ скрипта конфигурации автозаказки в.Net/C#
Чтобы мое приложение (.Net 1.1) использовало прокси-сервер, настроенный системой (через сценарий proxy.pac), я использовал вызовы взаимодействия для WinHTTP-функции WinHttpGetProxyForUrl, передавая URL-адрес proxy.pac, полученный из реестра.
К сожалению, я столкнулся со сценарием развертывания, где это не работает, поскольку файл proxy.pac развертывается локально на жестком диске пользователя, а URL-адрес - "file://C://xxxx".
Как четко указано в документации WinHttpGetProxyForUrl, он работает только со схемами http и https, поэтому не работает с файлом: //
Я рассматриваю 2 "некрасивых" решения проблемы (pac-файл - javascript):
Создание отдельного проекта JScript.NET с одним классом с одним статическим методом Eval(строка) и использование его для оценки во время выполнения функции, прочитанной из файла pac
Сборка во время выполнения сборки 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. Это был сетевой контроль против дебатов об удобстве локального пользователя.