Windows将系统范围的代理存储在注册表中,在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
中查找。您可以使用Python的_winreg模块来更改它(或者如果您使用Python 3,则使用winreg)。以下是示例代码:
import _winreg as winreg
INTERNET_SETTINGS = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r'Software\Microsoft\Windows\CurrentVersion\Internet Settings',
0, winreg.KEY_ALL_ACCESS)
def set_key(name, value):
_, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, name)
winreg.SetValueEx(INTERNET_SETTINGS, name, 0, reg_type, value)
set_key('ProxyEnable', 1)
set_key('ProxyOverride', u'*.local;<local>')
set_key('ProxyServer', u'X.X.X.X:8080')
要禁用它,您只需要将ProxyEnable键设置为0:
set_key('ProxyEnable', 0)
脚本运行后,浏览器仍然会在内存中保留旧的代理,因此您需要重新启动它们,以便它们可以从注册表中重新读取新的代理设置。我发现这非常令人烦恼,因此我将此片段转换为Python。
import ctypes
INTERNET_OPTION_REFRESH = 37
INTERNET_OPTION_SETTINGS_CHANGED = 39
internet_set_option = ctypes.windll.Wininet.InternetSetOptionW
internet_set_option(0, self.INTERNET_OPTION_REFRESH, 0, 0)
internet_set_option(0, self.INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
刷新Windows设置,这样您只需要在浏览器中按F5键即可获取新的代理设置。
我编写了一个小脚本来开关代理,源代码在Bitbucket上:
https://bitbucket.org/canassa/switch-proxy
这适用于使用Windows系统范围代理的任何浏览器(例如:Chrome,IE)。一些浏览器如Firefox使用内部代理设置。如果您想更改这些设置,则需要找出它们存储设置的位置并编写代码进行更改。