一、前言
相信大家平時肯定會收到朋友發來的連結,打開一看,哦,需要投票。投完票後彈出一個頁面(恭喜您,您已經投票成功),再次點選的時候發現,啊哈,您的IP(***.***.***.***)已經投過票了,不能重複投票。這時候,我們可能會想,能不能突破ip位址的限制進行刷票呢?有了這樣的想法,那就去做吧,下面我将介紹我這個簡單的刷票系統,僅供有需求的園友們參考。
二、系統設計
系統主要實作的是突破IP限制進行刷票,其中,由IP采集子產品負責從網際網路上爬取代理IP,放入阻塞隊列,該任務會定期執行。之後由投票子產品從阻塞隊列中擷取IP,并進行設定,然後進行投票。系統流程圖如下:

三、系統技術
系統使用HttpClient + JSoup + 多線程來完成刷票,HttpClient用于進行投票,JSoup用于解析頁面,多線程技術用于分離任務,使得分工更加明确。使用到了生産者消費者模式,該模式直接使用BlockingQueue來實作。
四、系統介紹
系統主要分為三個子產品:
① IP采集子產品
② 投票子產品
③ IP資訊子產品
其中,IP采集子產品主要是從網際網路爬取IP代理資訊,并将該資訊放入阻塞隊列,這樣就可以僞造IP,進行多次投票。
其中,投票子產品從IP采集子產品放入阻塞隊列取出IP資訊,并設定代理,找到投票入口位址,然後進行投票操作。
其中,IP資訊子產品主要是對爬取的IP資訊進行了封裝,友善其他子產品進行操作。
4.1 IP采集子產品
IP采集子產品流程圖如下
幾點說明:
1.系統使用的代理IP站點URL為http://www.kuaidaili.com/,www.xicidaili.com。
2.提取IP資訊為提取單條IP資訊,并判斷曆史IP表是否已經存在,若存在,表示之前已經加入過此IP資訊,則直接丢棄,反之,則加入隊列并加入曆史IP表。
3.此任務會定期開啟,如一個小時爬取一次代理IP。
4.2 投票子產品
投票子產品流程圖如下
1.投票網站http://www.hnxdf.com/vote/,我們選取的第一位進行投票,分析出投票的入口為http://www.hnxdf.com/vote/iRadio_vote.asp?VoTeid=215。
2.根據IP采集子產品放入隊列的IP資訊進行設定,然後進行投票。
4.3 IP資訊子產品
此子產品主要對從網站爬取的IP資訊進行了封裝,友善其他子產品進行操作。
五、系統代碼架構
系統的整個代碼架構如下
其中,bean包的IpInfo封裝了爬取的IP資訊。
其中,entrance包的Vote為系統的入口。
其中,thread包的IPCollectTask為爬取代理IP任務,VoteThread為進行投票線程。
六、系統代碼
1.IpInfo.java
View Code
2.Vote.java
3.IPCollectTask.java
4.VoteThread.java
七、系統總結
此系統很簡單,想清楚思路之後很快就能夠寫出代碼,系統運作時,由于代理IP站點提供的免費IP品質不是太高,有效的IP位址還是很少,所有效果不是特别理想,此系統功能也很簡單,但是各位園友可以在此基礎上去發揮自己的想象力,定制屬于自己的投票系統。
八、總結
至此,整個系統分析就已經完成了,其中,圖也畫得不是太規範,還請各位園友海涵。也謝謝各位園友觀看。
ps:整個工程(包含必要的jar檔案)已經上傳到GitHub上,歡迎各位園友通路:https://github.com/leesf/TicketBrushSystem
PS:如果您覺得閱讀本文對您有幫助,請點一下<b>“推薦”</b>按鈕,您的<b>“推薦”</b>,将會是我不竭的動力!
作者:<b>leesf</b> <b>掌控之中,才會成功;掌控之外,注定失敗。</b>
出處:http://www.cnblogs.com/leesf456/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如果覺得本文對您有幫助,您可以請我喝杯咖啡!