在 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,因为它们更简单且易于维护。
网友回复


