1

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

不幸的是,我遇到了一个部署场景,这不起作用,因为 proxy.pac 文件本地部署在用户的硬盘上,并且 url 是“file://C://xxxx”

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

我正在考虑解决这个问题的 2 个“丑陋”解决方案(pac 文件是 javascript):

  1. 创建一个单独的 JScript.NET 项目,具有单个静态方法 Eval(string) 的单个类,并使用它在运行时评估从 pac 文件中读取的函数

  2. 在运行时构建 JScript.NET 程序集并加载它。

由于这些解决方案真的很丑:),有人知道更好的方法吗?是否有可以通过互操作使用的 Windows 功能?

如果没有,你们对上述两种解决方案有什么看法——你更喜欢哪一种?

4

4 回答 4

3

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

然后,您可以将类似http://localhost:1234/gfdjklskjgfsdjgklsdfklgfsjkl的 URL 传递给 WinHttpGetProxyForUrl 函数,并允许它从您的微服务器中提取 PAC 文件。

(骇客...骇客...骇客...)

于 2008-11-25T16:08:13.670 回答
1

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 的实现。

于 2009-10-07T03:31:20.380 回答
0

不幸的是,无法回答您的问题(尽管几年前我玩过 jscript.net,并且以这种方式构建和运行只需几行代码)

不久前,我在一个个人的 work-around-the-office-proxy 文件中遇到了类似的 proxy.pac 打嗝 - 最后我选择了最简单的选项并将其放入自己的 IIS 站点,它坚如磐石并且可以正常工作我的电脑上的一切都完美无缺。

有时最好放弃并使用所提供的东西:)

于 2008-09-15T15:51:28.387 回答
0

我不能直接回答你的问题,但是从 mozilla 实现开始,关于支持文件 URL 的争论是明确的。这是一场网络控制与本地用户便利的辩论。

于 2008-10-22T21:23:42.007 回答