+
102
-

回答

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

网友回复

我知道答案,我要回答