.Net / C#中的自动代理配置脚本解析

时间:2020-03-05 18:53:47  来源:igfitidea点击:

为了使我的应用程序(.Net 1.1)使用系统配置的代理服务器(通过proxy.pac脚本),我使用了对WinHTTP函数WinHttpGetProxyForUrl的互操作调用,传递了我从注册表中获得的proxy.pac url。

不幸的是,我遇到了一个部署方案,该方案不起作用,因为proxy.pac文件已本地部署在用户的硬盘驱动器上,并且URL为" file:// C:// xxxx"

正如WinHttpGetProxyForUrl文档中明确指出的那样,它仅适用于http和https方案,因此对于file://失败。

我正在考虑2个"丑陋"的解决方案(pac文件是javascript):

  • 使用单个类和单个静态方法Eval(string)创建一个单独的JScript.NET项目,并使用它在运行时对从pac文件读取的函数进行评估
  • 在运行时构建JScript.NET程序集并加载它。

由于这些解决方案确实很丑陋:),有人知道更好的方法吗?有可以使用槽互操作的Windows功能吗?

如果不是,那么我们对上述两种解决方案有何想法?

解决方案

回答

不幸的是,无法解决问题(尽管几年前我玩过jscript.net,但以这种方式构建和运行只需要几行)

不久前,我用一个个人可解决办公室代理文件打了一个类似的proxy.pac打ic与我的电脑上的一切。

有时最好让步并使用提供的内容:)

回答

我无法直接回答问题,但是从mozilla实施开始,关于支持文件URL的争论一直很激烈。这是网络控制与本地用户便利性的争论。

回答

只是想一想:为什么不创建一个微型Web服务器,该服务器可以通过localhost套接字为本地PAC文件提供服务。我们应该对内容使用随机URI,这样很难以意想不到的方式浏览它。

然后,我们可以将诸如http:// localhost:1234 / gfdjklskjgfsdjgklsdfklgfsjkl之类的URL传递到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的实现。