python中set option_使用Python标准库修改 Windows 系统代理

Why

在用 Python 编写一些网络相关的脚本时经常会需要连上特定代理。而面向 Google 编程又必须能时刻上 Google 。来回切换实在太麻烦。必然要让脚本运行的时候自动切换至代理,运行结束时停止使用代理。

How

Windows 下一般程序都会默认走 IE 的代理设置。而 IE 的代理设置妥妥的记录在注册表中。

具体位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

该目录下有三个键值:

ProxyEnable 代理开关

ProxyOverride 例外(比如控制本地不走代理)

ProxyServer 代理地址

找到地方后,就可以很方便的使用标准库 winreg 进行修改了。

Attention

修改注册表后系统不会刷新代理设置。简单的说,就是相当于IE里输完了代理IP而没点确认或者应用。因此必须加上刷新设置才能时设置生效。

这里可以直接使用标准库 ctype 让 Windows 刷新 IE 设置。

完整代码

import winreg

import ctypes

#如果从来没有开过代理 有可能健不存在 会报错

INTERNET_SETTINGS = winreg.OpenKey(winreg.HKEY_CURRENT_USER,

r'Software\Microsoft\Windows\CurrentVersion\Internet Settings',

0, winreg.KEY_ALL_ACCESS)

#设置刷新

INTERNET_OPTION_REFRESH = 37

INTERNET_OPTION_SETTINGS_CHANGED = 39

internet_set_option = ctypes.windll.Wininet.InternetSetOptionW

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;') # 绕过本地

set_key('ProxyServer', u'127.0.0.1:8080') #代理IP及端口

internet_set_option(0, INTERNET_OPTION_REFRESH, 0, 0)

internet_set_option(0,INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)

#停用代理

set_key('ProxyEnable', 0) #停用

internet_set_option(0, INTERNET_OPTION_REFRESH, 0, 0)

internet_set_option(0,INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)

ps:markdown对缩进不友好就是对python不友好

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值