在 Windows 10 上,可以使用 Python 通过修改注册表或调用系统命令来设置系统代理。以下是两种常见的方法:
方法 1:使用 winreg 修改注册表Windows 的系统代理设置存储在注册表中,可以通过 Python 的 winreg 模块修改。
示例代码import winreg # 定义注册表路径 REG_PATH = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings" # 设置代理 def set_proxy(enable, proxy_server, bypass_list=""): try: # 打开注册表键 registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0, winreg.KEY_WRITE) # 设置代理启用状态 (1 启用, 0 禁用) winreg.SetValueEx(registry_key, "ProxyEnable", 0, winreg.REG_DWORD, enable) # 设置代理服务器地址 winreg.SetValueEx(registry_key, "ProxyServer", 0, winreg.REG_SZ, proxy_server) # 设置绕过列表(可选) if bypass_list: winreg.SetValueEx(registry_key, "ProxyOverride", 0, winreg.REG_SZ, bypass_list) # 关闭注册表键 winreg.CloseKey(registry_key) print("代理设置成功!") except Exception as e: print(f"设置代理失败: {e}") # 示例:启用代理 set_proxy(enable=1, proxy_server="127.0.0.1:8080", bypass_list="localhost;127.0.0.1") # 示例:禁用代理 # set_proxy(enable=0, proxy_server="")参数说明enable:1 启用代理,0 禁用代理。proxy_server:代理服务器地址,格式为 IP:端口。bypass_list:绕过代理的地址列表,用分号分隔。方法 2:使用 netsh 命令
Windows 提供了 netsh 命令行工具来配置代理设置,可以通过 Python 的 subprocess 模块调用。
示例代码import subprocess # 设置代理 def set_proxy(enable, proxy_server, bypass_list=""): try: if enable: # 启用代理 subprocess.run(f"netsh winhttp set proxy {proxy_server} bypass-list={bypass_list}", shell=True) print("代理已启用") else: # 禁用代理 subprocess.run("netsh winhttp reset proxy", shell=True) print("代理已禁用") except Exception as e: print(f"设置代理失败: {e}") # 示例:启用代理 set_proxy(enable=True, proxy_server="127.0.0.1:8080", bypass_list="localhost;127.0.0.1") # 示例:禁用代理 # set_proxy(enable=False, proxy_server="")参数说明enable:True 启用代理,False 禁用代理。proxy_server:代理服务器地址,格式为 IP:端口。bypass_list:绕过代理的地址列表,用分号分隔。方法 3:使用 ctypes 调用 Windows API
如果需要更底层的控制,可以使用 ctypes 调用 Windows API 来设置代理。
示例代码import ctypes # 定义常量 INTERNET_OPTION_PROXY = 38 INTERNET_OPEN_TYPE_PROXY = 3 # 设置代理 def set_proxy(proxy_server): try: # 设置代理 internet_set_option = ctypes.windll.Wininet.InternetSetOptionW internet_set_option(0, INTERNET_OPTION_PROXY, proxy_server, len(proxy_server)) print("代理设置成功!") except Exception as e: print(f"设置代理失败: {e}") # 示例:设置代理 set_proxy("127.0.0.1:8080")注意事项管理员权限:修改系统代理可能需要管理员权限。重启生效:某些情况下,修改代理后需要重启浏览器或系统才能生效。代理格式:代理服务器地址格式为 IP:端口,例如 127.0.0.1:8080。
以上方法可以根据需求选择使用。推荐使用 winreg 或 netsh,因为它们更简单且易于维护。
网友回复