【发布时间】:2010-11-07 06:44:49
【问题描述】:
我开发了一个跨国公司使用的关键应用程序。全球各地办公室的用户都需要能够安装此应用程序。
该应用程序实际上是 Excel 的一个插件,我们有一个基于 Setuptools 的 easy_install 的自动安装程序,可确保在用户打开 Excel 时自动安装或更新所有项目的依赖项。这一切都运行得非常优雅,因为用户很少意识到完全在后台进行的所有安装。
很遗憾,我们正在扩建和开设新办公室,这些办公室都有不同的代理设置。这些设置似乎每天都在变化,所以我们无法跟上那些在不告诉我们的情况下改变东西的外包安全人员。这很糟糕,但我们只需要解决它。
我想以编程方式检测用户运行的 Windows 工作站上的系统范围代理设置:
组织中的每个人都运行 Windows XP 和 Internet Explorer。我已经验证每个人都可以毫无问题地从 IE 下载我们的东西,无论他们身在何处。
所以我需要做的就是检测 IE 正在使用哪些代理设置并让 Setuptools 使用这些设置。理论上所有这些信息都应该在注册表中。但是有没有更好的方法来找到它,保证不会随着人们升级 IE 而改变?例如,是否有可用于发现代理设置的 Windows API 调用?
总结:
- 我们在 Windows XP 上使用 Python 2.4.4
- 我们需要检测 Internet Explorer 代理设置(例如主机、端口和代理类型)
- 我将使用此信息动态重新配置easy_install,以便它可以通过代理下载egg 文件。
更新0:
我忘记了一个重要细节:每个站点都有一个自动配置“pac”文件。
Windows\CurrentVersion\InternetSettings\AutoConfigURL 中有一个键,它指向本地服务器上的 HTTP 文档,其中包含看起来像 javascript 文件的内容。
pac 脚本基本上是一系列嵌套的 if 语句,它们将 URL 与正则表达式进行比较,然后最终返回所选代理服务器的主机名。该脚本是一个名为 FindProxyForURL(url, host) 的单个 javascript 函数
因此,挑战在于找出任何给定服务器要使用哪个代理。唯一 100% 保证的方法是查找 pac 文件并从 Python 调用 Javascript 函数。
有什么建议吗?有没有更优雅的方法来做到这一点?
【问题讨论】:
-
如果您看到 FindProxyForURL(url, host),那么肯定是代理自动配置设置 (PAC) en.wikipedia.org/wiki/Proxy_auto-config。您可以使用 pacparser 解析 java 脚本文件以确定代理服务器和端口。 code.google.com/p/pacparser
标签: python windows networking proxy setuptools