我用Python写自动刷代理服务IP的经过

来源:互联网 发布:淘宝刷手p图软件哪个好 编辑:程序博客网 时间:2024/06/06 05:09

应朋友要求实现一个动态切换代理服务器IP的功能,朋友只发了一个博客链接给我,用Python做的,当时我对Python并不熟悉,但是那篇博客中的思路确实很清晰,于是决定安装Python,按照博客的思路,一步一步的走下去。

做事之前,我需要搞明白,动态切换代理服务器IP到底是什么意思?具体的工作原理是什么?于是,搜索代理服务器,找到了squid(Linux下的一个开源代理法服务器软件),了解了传统代理服务器工作的基本原理,并在Linux上安装了一下,做了一个实验,写了一篇博客。了解了代理服务器的基本原理之后,开始了正式的摸索之旅。

第一步,安装Python。第一反应就是去Python官网下载Python。这里出现了一个选择Python版本的问题,Python2和Python3到底选哪个呢?既然别人博客中用的是Python2,那我也就用Python2了,管他好坏呢,先把Demo跑出来再说。既然有了开发语言,选择什么集成开发环境呢?本人科班出身,当初接收的“传统”思想是,C/C++,底层开发语言,有挑战性,Java都是封装好的,比较傻,所有我有了莫名讨厌Java的情感(现在想想,这个想法和现在的IT发展有点偏离),但现在很多情况下都要求会Java。不是怕自己学不会Java,只是没有找到一个说服自己学习Java的理由,就是不想碰他,但是工作又需要它,好了,有点扯远了。于是,就抱着同时用一个集成开发环境来学习Java和Python的想法,我选择了用Eclipse。至此,开发环境搭建完成。

第二步,学习Python的基本语法。因为,有C/C++,PHP,SHELL,Matlab的编程集基础,我第以反应就是,只要我了解一些Python的基本书法和数据结构,我就能把它用起来,熟练还是不熟练又是另一回事,反正只是为了跑Demo嘛。我选择了Python的基础在线教程,了解Python的变量类型、定义方法、数据结构、for、while循环、函数的声明和定义之后,我就开始了使用Python的路程。

第三步,按照博客中的说明,用Python跑通Demo。这期间由于对Python的不熟悉,多次使用了Google、Baidu以及Python开发手册,主要涉及注册表的编程。果然,按照博客中的做法,很快的实现了动态服务器IP自动切换的功能。

第四步,将Demo打包成exe。这个过程比较简单,搜索了一下,大家用的比较多的就是Pyinstaller和Py2exe,我在一篇博客中看到说Py2exe不太好用(没有实际体验过),所以直接选择了Pyinstaller。先做一个打包成exe的“Hello word” Demo,看了几篇别人的博客,很快的解决了打包成exe的问题。

第五步,将Python打包成的exe安装成Windows系统服务。类似的功能我之前在Windows上用C++做过,于是回去搜索自己以前写的C++服务Demo,用C++写了两天,发现好烦啊,还费事,开发效率太低了,于是我想能不能用Python做Windows服务程序呢,答案是肯定的,而且按照博客上的说明,我很快的完成了实现编译成Windows服务的Demo。于是开始将自动切换代理服务器IP的Demo和Windows服务Demo做在一起!窃喜,觉得大功快要告成了!!!其实,真正的困难才刚刚开始。

困难1:将服务编译成exe并安装,启动服务,完了,服务无法启动!为神马这样子?我完全不知道该从哪开始调试。抓抓头发,从头做起吧,于是我先在Windows服务demo的基础上,一点一点添加代理服务Demo的代码,一点一点添加,最后发现,是读取配置文件的时候出错了,所以服务直接退出。读取配置文件出错?不应该了,我没编译成exe之前,一切都很正常啊?为什这样子?还是先看看日志吧!

困难2:无法写日志。不编译成exe执行,一点问题没有,编译成exe之后,写日志就是不成功!你这是要闹哪样啊?经过了长久的摸索,此处略去一万字,耗了我一天!最后,我将程序获取的路径换成了固定的绝对路径,日志正常输出,天啊,我getcwd()错在哪了,也是绝对路径啊?最后,也没搞明白为神马,项目中还是选择了使用固定绝对路径。困难2解决了,服务可以正常运行,日志可以正常输出,可是代理服务IP就是没有切换过来?
又经过了半天的Google、baidu、stackover,思路逐渐确定,确定是Windows权限问题,因为操作了注册表。以前觉得Windows傻乎乎的能有什么限制,现在想想,我错了!就算是有权限限制,那我应该在哪设定呢?打开服务services.msc,查看服务器的属性,发现有一个登陆和切换用户的选项,于是填入了Administrator,输入开机密码,应用、确定,启动服务器,奇迹出现了,代理IP可以自动切换了,Happy,但是已经到深夜,一天又耗过去了!

困难3:本来以为上面的所有问题解决了,也就可以打包,发给朋友!可是朋友用的时候,在IP里面搜索IP,一直是本机IP,并不是代理服务器的IP,靠,我机器上明明是可以的啊!于是又Goolge、baidu、stackover,最后发现,是因为IE浏览器缓存了代理服务器的IP,所以切换不过来,实际上已经切换过来了,于是使用这个网页中的方法,解决了我的问题,可以实时的看到代理IP的切换了。

感悟:Demo只能是Demo,真正做一个稳定、可用的软件,还是需要克服种种问题!Demo就是温室的花朵,在温室内长的枝繁叶茂,一旦走出温室,之后被Kill了!真正能在复杂环境下能够正常工作的软件,既需要整体的良好架构,也需要后期慢慢的雕琢!

实现代码:http://download.csdn.net/detail/guoxiaojie_415/9729050

0 0
原创粉丝点击