Python修改代理IP终极方案

时间:2019-09-06 15:44

声明:本文源自今日头条创作者一个程序员的奋斗史原创,如需转载,请先征得作者本人同意。不同于网络博客中的各种文章,下面的所有描述均经过仔细测试,如有不合适的地方需要讨论或有源码需求,请私信联系。



缘由

先提个需求再来conding。


经常使用shadowsocks的同鞋们应该都会遇到这样一个问题,每次退出ss重启电脑后,电脑浏览器就会无缘无故的无法上网,会提示ERR_PROXY_CONNECTION_FAILED错误,就像下面这张图一样。


但是其他所有程序例如QQ、微信等可以正常使用,ping www.baidu.com命令也是跑得杠杠的,没有一点问题,就像下面这张图显示的一样,那么到底是什么问题呢?


方案对策

其实,稍微懂点网络的同鞋应该都知道,这很有可能是本身电脑代理设置的问题。我们只需要打来IE查看下代理服务器设置即可。


Internet选项 -> 连接 -> 局域网设置,具体步骤可看下图:


果然,我们可以看到这时的局域网设置已经被更改了,但是在退出ss后,他并没有帮我们自动取消这一代理设置。


那么,应该怎么来解决呢,其实很简单,只需要取消代理服务器的勾选项,重启浏览器即可,我们就可以正常的在互联网翱翔了。


用程序来搞定?

作为一名程序员,如果让你每次使用ss后都要重新设置下浏览器代理设置,那么我想你真的会崩溃的,每次都来重复相同的动作,可不可以用程序来帮我们来完成呢?答案是肯定的,下面带领大家一步步寻找解决方案。


3.1 原理


既然浏览器可以正常读取代理设置,那么肯定很容易想到它在一个地方存储这一配置,在Windows中常用的,那就是注册表了。


注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。


简单的google、baidu一下,我们就会发现其存储的位置如下:


HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings


每次启用后ProxyEnable值为1,禁用后ProxyEnable值也就为0。


3.2 Python 注册表操作简介


知道了原理,下来的就很简单来,只剩下编码实现。这里我们选用Python来完成,需要的知识点,除了基本语法之外,剩下的仅仅只有操作注册表的函数来。


Python操作注册表目前常用的有以下三种方法:


1. _winreg(Python2)


2. winreg (Python3)


3.win32 api


使用_winreg有一个问题,如果Python是32位的,并且是运行在64位的操作系统上时就会有一点小问题,由于操作系统会进行注册表的重定向,32位的程序无法访问64位应用程序的注册表。在Python2.6以前这个问题都没有解决,在Python2.7中通过补丁的形式修正了这个问题 http://bugs.python.org/issue7347。所以,在使用过程中要注意本地Python版本。


3.3 编码实现


介绍完了原理,下来就剩下编码实现了,实现代码也是相当的简单,这里以Python3为例,具体代码如下:


如有需要文本形式代码,请私信联系,第一时间看到后会发送给您。