我用Python寫自動刷代理服務IP的經過

應朋友要求實現一個動態切換代理服務器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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章