我開發了一家跨國公司使用的關鍵應用程序。全球各地辦事處的用戶需要能夠安裝此應用程序。使用Python以編程方式檢測Windows XP上的系統代理設置
該應用程序實際上是Excel的插件,我們有一個基於Setuptools easy_install的自動安裝程序,可確保在用戶切換Excel時隨時自動安裝或更新所有項目的依賴關係。由於用戶很少意識到完全在後臺發生的所有安裝,因此這一切都非常優雅。
不幸的是,我們正在擴大,並開設新的辦事處,所有有不同的代理服務器設置。這些設置似乎每天都在變化,所以我們無法跟上那些沒有告訴我們的外包安全人員。它很爛,但我們只需要解決它。
我想以編程方式檢測在Windows工作站我們的用戶運行系統範圍的代理設置:
每個人都在organisazation運行Windows XP和Internet Explorer。我已經證實,每個人都可以從IE下載我們的東西,不管問題出在哪裏,都不會有問題。
因此,所有我需要做的是檢測IE瀏覽器正在使用什麼代理服務器設置,讓setuptools的使用這些設置。理論上所有這些信息都應該在註冊表中。但是有沒有更好的方法來找到它,保證不會隨着人們升級IE而改變?例如,是否可以使用Windows API調用來發現代理設置?
總結:
- 我們使用Python 2.4.4在Windows XP
- 我們需要檢測Internet Explorer代理設置(如主機,端口和代理型)
- 我要去使用這些信息動態地重新配置easy_install,以便它可以通過代理下載egg文件。
UPDATE0:
我忘了一個重要的細節:每個站點都有一個自動配置 「PAC」 文件。
有在的Windows \ CurrentVersion \互聯網設定\ AutoConfigURL的關鍵指向包含什麼看起來像一個JavaScript文件的本地服務器上的HTTP文件。
的PAC腳本基本上是一系列嵌套的if語句,其比較的URL對一個正則表達式,然後最終返回所選擇的代理服務器的主機名。該腳本稱爲FindProxyForURL(URL,主機)
因此面臨的挑戰是找出任何給定的服務器使用的代理服務器的單個JavaScript函數。唯一100%保證的方法是查找pac文件並從Python中調用Javascript函數。
有什麼建議嗎?有沒有更優雅的方式來做到這一點?
如果您看到FindProxyForURL(url,host),那麼它肯定是代理自動配置設置(PAC)http://en.wikipedia.org/wiki/Proxy_auto-config。您可以使用pacparser來解析java腳本文件以確定代理服務器和端口。 https://code.google.com/p/pacparser/ – 2014-03-21 06:45:04