刷票系统(微信人工投票10元1000票)
刷票系统(微信人工投票10元1000票)
一、前言
相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票。投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的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.javapackagecom.hust.grid.leesf.bean; publicclassIpInfo{ publicIpInfo(StringipAddress,intport,Stringlocation, StringanonymousType,Stringtype,StringconfirmTime){ this(ipAddress,port,location,anonymousType,type,confirmTime,null, null); } publicIpInfo(StringipAddress,intport,Stringlocation, StringanonymousType,Stringtype,StringconfirmTime, StringgetPostSupport,StringresponseSpeed){ this.ipAddress=ipAddress; this.port=port; this.location=location; this.anonymousType=anonymousType; this.type=type; this.confirmTime=confirmTime; this.getPostSupport=getPostSupport; this.responseSpeed=responseSpeed; } publicStringgetIpAddress(){ returnipAddress; } publicvoidsetIpAddress(StringipAddress){ this.ipAddress=ipAddress; } publicintgetPort(){ returnport; } publicvoidsetPort(intport){ this.port=port; } publicStringgetLocation(){ returnlocation; } publicvoidsetLocation(Stringlocation){ this.location=location; } publicStringgetAnonymousType(){ returnanonymousType; } publicvoidsetAnonymousType(StringanonymousType){ this.anonymousType=anonymousType; } publicStringgetType(){ returntype; } publicvoidsetType(Stringtype){ this.type=type; } publicStringgetConfirmTime(){ returnconfirmTime; } publicvoidsetConfirmTime(StringconfirmTime){ this.confirmTime=confirmTime; } publicStringgetGetPostSupport(){ returngetPostSupport; } publicvoidsetGetPostSupport(StringgetPostSupport){ this.getPostSupport=getPostSupport; } publicStringgetResponseSpeed(){ returnresponseSpeed; } publicvoidsetResponseSpeed(StringresponseSpeed){ this.responseSpeed=responseSpeed; } @Override publicbooleanequals(Objectanthor){ if(this==anthor){ returntrue; } if(anthor==null||getClass()!=anthor.getClass()){ returnfalse; } IpInfoipInfo=(IpInfo)anthor; return(this.ipAddress.equals(ipInfo.ipAddress) &&this.port==ipInfo.port &&this.location.equals(ipInfo.location) &&this.anonymousType.equals(ipInfo.anonymousType) &&this.type.equals(ipInfo.type)&&this.confirmTime .equals(ipInfo.confirmTime)) &&this.getPostSupport.equals(ipInfo.getPostSupport) &&this.responseSpeed.equals(ipInfo.responseSpeed); } @Override publicinthashCode(){ inthash=5; hash=89*hash +(this.ipAddress!=null?this.ipAddress.hashCode():0); hash=89*hash+this.port; hash=89*hash +(this.location!=null?this.location.hashCode():0); hash=89 *hash +(this.anonymousType!=null?this.anonymousType.hashCode() :0); hash=89*hash+(this.type!=null?this.type.hashCode():0); hash=89*hash +(this.confirmTime!=null?this.confirmTime.hashCode():0); hash=89 *hash +(this.getPostSupport!=null?this.getPostSupport.hashCode() :0); hash=89 *hash +(this.responseSpeed!=null?this.responseSpeed.hashCode() :0); returnhash; } @Override publicStringtoString(){ return"ipAddress="+ipAddress+",port="+port+",localtion=" +location+",anonymousType="+anonymousType+",type=" +type+",confirmTime="+confirmTime+",getPostSupport=" +getPostSupport+",responseSpeed="+responseSpeed; } privateStringipAddress; privateintport; privateStringlocation; privateStringanonymousType; privateStringtype; privateStringconfirmTime; privateStringgetPostSupport; privateStringresponseSpeed; }
2.Vote.javapackagecom.hust.grid.leesf.entrance; importjava.util.Timer; importjava.util.concurrent.BlockingQueue; importjava.util.concurrent.LinkedBlockingQueue; importcom.hust.grid.leesf.bean.IpInfo; importcom.hust.grid.leesf.thread.IPCollectTask; importcom.hust.grid.leesf.thread.VoteThread; publicclassVote{ privateBlockingQueue<IpInfo>ipInfoQueue; privateIPCollectTaskipCollectTask; privateVoteThreadvoteThread; publicVote(){ ipInfoQueue=newLinkedBlockingQueue<IpInfo>(); ipCollectTask=newIPCollectTask(ipInfoQueue); voteThread=newVoteThread(ipInfoQueue); } publicvoidvote(){ Timertimer=newTimer(); longdelay=0; longperiod=1000*60*60; //每一个小时采集一次ip timer.scheduleAtFixedRate(ipCollectTask,delay,period); //开启投票任务 voteThread.start(); } publicstaticvoidmain(String[]args){ Votevote=newVote(); vote.vote(); } }
3.IPCollectTask.javapackagecom.hust.grid.leesf.thread; importjava.io.IOException; importjava.util.ArrayList; importjava.util.List; importjava.util.TimerTask; importjava.util.concurrent.BlockingQueue; importjava.util.concurrent.LinkedBlockingQueue; importorg.jsoup.Jsoup; importorg.jsoup.nodes.Document; importorg.jsoup.nodes.Element; importorg.jsoup.select.Elements; importcom.hust.grid.leesf.bean.IpInfo; publicclassIPCollectTaskextendsTimerTask{ privateBlockingQueue<IpInfo>ipInfoQueue;//连接生产者与消费者的阻塞队列 privateList<IpInfo>historyIpLists;//记录已经获取的ip信息 publicIPCollectTask(BlockingQueue<IpInfo>ipInfoQueue){ this.ipInfoQueue=ipInfoQueue; this.historyIpLists=newArrayList<IpInfo>(); } /** *获取www.xicidaili.com的ip地址信息 */ publicvoidgetXiCiDaiLiIpLists(){ Stringurl="http://www.xicidaili.com/"; Stringhost="www.xicidaili.com"; Documentdoc=getDocumentByUrl(url,host); //解析页面的ip信息 parseXiCiDaiLiIpLists(doc); } /** *解析页面的ip信息 * *@paramdoc */ publicvoidparseXiCiDaiLiIpLists(Documentdoc){ ElementseleLists=doc.getElementsByTag("tbody"); Elementtbody=eleLists.get(0);//获取tbody ElementstrLists=tbody.children(); Elementele=null; for(inti=0;i<trLists.size();i++){ if((i%22==0)||(i%22==1)){//去掉不符合条件的项 continue; } ele=trLists.get(i); ElementschildrenList=ele.children(); StringipAddress=childrenList.get(1).text(); intport=Integer.parseInt(childrenList.get(2).text()); Stringlocation=childrenList.get(3).text(); StringanonymousType=childrenList.get(4).text(); Stringtype=childrenList.get(5).text(); StringconfirmTime=childrenList.get(6).text(); IpInfoipInfo=newIpInfo(ipAddress,port,location, anonymousType,type,confirmTime); putIpInfo(ipInfo); } } /** *将ip信息放入队列和历史记录中 * *@paramipInfo */ privatevoidputIpInfo(IpInfoipInfo){ if(!historyIpLists.contains(ipInfo)){//若历史记录中不包含ip信息,则加入队列中 //加入到阻塞队列中,用作生产者 try{ ipInfoQueue.put(ipInfo); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //加入历史记录中 historyIpLists.add(ipInfo); } } /** *根据网页Document解析出ip地址信息 * *@paramdoc */ privatevoidparseKuaiDaiLiIpLists(Documentdoc){ ElementseleLists=doc.getElementsByTag("tbody"); Elementtbody=eleLists.get(0);//获取tbody ElementstrLists=tbody.children();//获取十条ip记录 for(Elementtr:trLists){//遍历tr ElementstdElements=tr.children();//tr中的td包含了具体的信息 StringipAddress=tdElements.get(0).text(); intport=Integer.parseInt(tdElements.get(1).text()); StringanonymousType=tdElements.get(2).text(); Stringtype=tdElements.get(3).text(); StringgetPostSupport=tdElements.get(4).text(); Stringlocation=tdElements.get(5).text(); StringresponseSpeed=tdElements.get(6).text(); StringconfirmTime=tdElements.get(7).text(); IpInfoipInfo=newIpInfo(ipAddress,port,location, anonymousType,type,confirmTime,getPostSupport, responseSpeed); putIpInfo(ipInfo); } } /** *根据提供的url和host来获取页面信息 * *@paramurl *@paramhost *@return */ privateDocumentgetDocumentByUrl(Stringurl,Stringhost){ Documentdoc=null; try{ doc=Jsoup .connect(url) .header("User-Agent", "Mozilla/5.0(WindowsNT6.1;WOW64;rv:43.0)Gecko/20100101Firefox/43.0") .header("Host",host).timeout(5000).get(); }catch(IOExceptione){ e.printStackTrace(); } returndoc; } /** *获取http://www.kuaidaili.com/free/的ip */ privatevoidgetKuaiDaiLiFreeIpLists(){ //第一次访问,需解析总共多少页 StringbaseUrl="http://www.kuaidaili.com/free/inha/"; Stringhost="www.kuaidaili.com"; Documentdoc=getDocumentByUrl(baseUrl,host); //解析ip信息 parseKuaiDaiLiIpLists(doc); ElementlistNav=doc.getElementById("listnav"); //获取listnav下的li列表 ElementsliLists=listNav.children().get(0).children(); //获取含有多少页的子元素 ElementpageNumberEle=liLists.get(liLists.size()-2); //解析有多少页 intpageNumber=Integer.parseInt(pageNumberEle.text()); //拼接成其他页的访问地址 for(intindex=1;index<=pageNumber;index++){ baseUrl=baseUrl+index; doc=getDocumentByUrl(baseUrl,host); parseKuaiDaiLiIpLists(doc); //休眠一秒 fallSleep(1); } } /** *获取www.kuaidaili.com/proxylist/的ip */ privatevoidgetKuaiDaiLiIpLists(){ intstart=1; StringbaseUrl="http://www.kuaidaili.com/proxylist/"; Stringhost="www.kuaidaili.com"; while(start<=10){//爬取10页 Stringurl=baseUrl+start+"/"; Documentdoc=getDocumentByUrl(url,host); //解析ip信息 parseKuaiDaiLiIpLists(doc); start++; //休眠一秒 fallSleep(1); } } /** *进行休眠 */ privatevoidfallSleep(longseconds){ try{ Thread.sleep(seconds*1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } @Override publicvoidrun(){ //getKuaiDaiLiFreeIpLists(); System.out.println("IPCollecttaskisrunning"); getKuaiDaiLiIpLists(); getXiCiDaiLiIpLists(); } publicBlockingQueue<IpInfo>getIpInfoQueue(){ returnipInfoQueue; } publicstaticvoidmain(String[]args){ BlockingQueue<IpInfo>queue=newLinkedBlockingQueue<IpInfo>(); IPCollectTasktask=newIPCollectTask(queue); Threadthread=newThread(task); thread.start(); try{ Thread.sleep(30*1000); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } System.out.println("queuesizeis"+queue.size()); try{ while(!queue.isEmpty()){ System.out.println(queue.take()); } }catch(InterruptedExceptione){ e.printStackTrace(); } System.out.println("historyListsizeis"+task.historyIpLists.size()); } }
4.VoteThread.javapackagecom.hust.grid.leesf.thread; importjava.io.IOException; importjava.util.concurrent.BlockingQueue; importorg.apache.http.HttpEntity; importorg.apache.http.HttpHost; importorg.apache.http.HttpResponse; importorg.apache.http.client.ClientProtocolException; importorg.apache.http.client.HttpClient; importorg.apache.http.client.methods.HttpGet; importorg.apache.http.conn.params.ConnRoutePNames; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.params.HttpConnectionParams; importorg.apache.http.params.HttpParams; importorg.apache.http.util.EntityUtils; importcom.hust.grid.leesf.bean.IpInfo; publicclassVoteThreadextendsThread{ privateBlockingQueue<IpInfo>ipInfoQueue; publicVoteThread(BlockingQueue<IpInfo>ipInfoQueue){ this.ipInfoQueue=ipInfoQueue; } @Override publicvoidrun(){ HttpClientclient=newDefaultHttpClient(); HttpParamsparams=client.getParams(); HttpConnectionParams.setConnectionTimeout(params,10000); HttpConnectionParams.setSoTimeout(params,15000); HttpResponseresponse=null; HttpGetget=null; HttpEntityentity=null; HttpHostproxy=null; while(true){ IpInfoipInfo=null; try{ ipInfo=ipInfoQueue.take(); }catch(InterruptedExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } proxy=newHttpHost(ipInfo.getIpAddress(),ipInfo.getPort()); client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); get=newHttpGet( "http://www.hnxdf.com/vote/iRadio_vote.asp?VoTeid=215"); get.addHeader("Host","www.hnxdf.com"); get.addHeader("User-Agent", "Mozilla/5.0(WindowsNT6.1;WOW64;rv:43.0)Gecko/20100101Firefox/43.0"); try{ response=client.execute(get); entity=response.getEntity(); byte[]bytes=EntityUtils.toByteArray(entity); //对响应内容编码格式进行转化,统一成utf-8格式 Stringtemp=newString(bytes,"gbk"); byte[]contentData=temp.getBytes("utf-8"); System.out.println(newString(contentData)); System.out.println("-----------------------------------"); }catch(ClientProtocolExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } } }
七、系统总结
此系统很简单,想清楚思路之后很快就能够写出代码,系统运行时,由于代理IP站点提供的免费IP质量不是太高,有效的IP地址还是很少,所有效果不是特别理想,此系统功能也很简单,但是各位园友可以在此基础上去发挥自己的想象力,定制属于自己的投票系统。
一天多少分钟(小学生1分钟走多少米)资料图片日前,教育部对全国人大代表提出的关于教育发展的建议进行了答复。针对代表提出的关于学生课间改为15分钟,保障学生有充裕的休息时间的建议,教育部表示,按照学校卫生工作条例规定,
少年之名定档关于到现在少年之名定档这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道少年之名定档,小编也是到网上收集了一些与少年之名定档
以父之名什么意思(歌曲以父之名什么寓意)CHAPTER2以父之名2003年7月16日,专辑叶惠美的第一主打以父之名在全球首播,世界上有八亿人同时聆听起这首哥特风格深沉的华语乐曲就在这一天,全亚洲超过50家电台定每一年的7
汉台在哪里(汉台区是哪里)汉中市,陕西省地级市,简称汉,古称南郑兴元梁州天汉。位于陕西省南部,北依秦岭山脉,南屏巴山浅麓,辖汉台区南郑区城固县留坝县勉县佛坪县略阳县宁强县西乡县镇巴县洋县2区9县。总人口达3
天局胜天半子(天局胜天半子经典诗句)天局胜天半子(天局胜天半子经典诗句)人民的名义中祁同伟常说的一句胜天半子源自矫健的小说天局,讲述的是棋痴浑沌与主宰人鬼神及天地万物的主宰天人,在严寒的冬日,以石子为棋,博弈围棋,最
胜天半子什么意思(胜天半子是什么电视剧)人民的名义是我十分喜欢的电视剧,里面的反派祁同伟总是喜欢看一本书,叫做天局,电视剧里经常提到一句话胜天半子。胜天半子这句话,太有气魄了,对比祁同伟的出身,都是普通人,谁又不想胜天半
今日南华菌子价格,菌子读音在自己的店铺里,雨水一来就出了,以下简称南华和平。今中国南华第十八届野生菌云上美食节系列活动之一云播菌乡展演通过中央广播电视总台云南总站央视频号云南省文化和旅游厅视频号腾讯新浪网易
今日南充商品肉价格南充人民政府官网城市居民食品价格总体下降粮油价格稳定,与11日相比持平泰安地区肉毛鸡社会收购价4点454点。是否会导致我国粮食价格大幅上涨未来猪肉价格走势如何怎样应对大宗商品价格波动8月17日,临
今日卓创生猪价格今日生猪价格表今日生猪价格表是按具体省份名称公布的,但规模场仍保持正常的出栏节奏。除了春节几天之外,生猪价格处于高位的西南能繁母猪存栏环比下降0点价格涨至较高的位置影响了部分消费,同时近。牲畜交
今日南京雨花茶价格雨花茶网站南京雨花茶新茶作者admin开今年3月24日今年3月24日验证个南京楼凤,南京居民楼大火中,这一幕,大红袍是什么茶,主打SW。据介绍,大红袍茶是红茶吗,雨花茶的制作工艺全程需要经历
今日建瓯锥栗收购价格(建瓯锥栗价格)今年以来,建阳有很多特产,厦门旅游网提供福建厦门旅游景点推荐厦门旅游攻略厦门旅行社厦门旅游线路厦门旅游地接厦门景点厦门机场接送国内导游厦门导游厦门地接导游厦门团建拓展,23页珍藏版
一磅是多少斤(一磅是多少克重)最近,tiktok博主MeganMapes拍摄的一段视频在网上引起轩然大波,其中内容震撼得外网网友连喊恶心想吐。视频里曝光的,是一种发生在国外,且存在时间相当长的竞赛。捕猎者们会在
1mpa等于多少公斤力(1兆帕是多少公斤压力)1mpa等于多少公斤力(1兆帕是多少公斤压力)4月28日,重庆大学煤矿灾害动力学与控制国家重点实验室,教授周军平正对目前全球最大的深部岩土工程多功能物理模拟试验系统进行实验启动前的
1公斤等于多少牛(20千牛顿等于多少公斤)估算生猪的重量公式猪的重量(公斤)(生猪的体长厘米胸围是多少厘米)160说明猪营养状况良好的系数用142。营养状况中等的系数用156。营养状况不良的系数用160(162)。用皮尺量
1牛顿等于多少公斤(1000牛顿等于多少公斤力)1)长度单位公制米(m)厘米(cm)毫米(mm)。l米100厘米1000毫米英制码(yd)英尺(ft)英寸(in)。1码3英尺,1英尺12英寸换算1码0。9144米,1英尺0。30
1mpa等于多少kn(1mpa等于多少公斤什么意思)真空泵扬程怎么计算,流量怎么计算?在实际应用里,我们并没有用能量单位来表示扬程,而是用液柱高度H来表示,单位是m(米)。除了米之外,常用的扬程单位还有公斤(kg),兆帕(Mpa),
亚马逊电商(亚马逊开店流程及费用)亚马逊电商(亚马逊开店流程及费用)疫情彻底改变了美国电商的发展路径其电商渗透率从疫情前的14。3飙升至21。3,2020年美国全年电商销售额为8611。2亿美元,同比增长44,是2
京东开店多少钱(入驻京东自营店保证金多少钱)本文解决的问题京东的电脑办公类目怎么开店?需要啥资料?京东电脑类目已经是非常成熟了,因为众所周知京东是电子数码产品打开市场的,这意味着京东对数码产品类目不会太稀缺,相反还可能比较饱
丁俊晖排名赛冠军(丁俊晖排名赛冠军)丁俊晖排名赛冠军(丁俊晖排名赛冠军)北京时间4月2日消息,中国一哥丁俊晖在隔离的酒店中,度过了自己的33岁生日。尽管是独自一人在特殊的环境里过生日,但丁俊晖并不孤独,众多球迷和网友
单排溜冰技巧(单排轮滑新手教程)单排溜冰技巧(单排轮滑新手教程)轮滑是很多人都喜爱的运动,也有不少新手想要学习轮滑。一般来说,单排轮滑是比较容易的轮滑,适合初学者进行学习。那么,单排轮滑怎么练习?单排轮滑练习注意
栗子怎么煮(栗子怎么煮才能好剥皮)俗话说得好,十月的栗子笑哈哈!指的就是现在正值吃板栗的最佳季节。板栗香甜可口,老人孩子都爱吃,一说到板栗,那吃的最多的还是煮板栗,煮板栗相信大家碰到最多的烦恼就是板栗不好剥壳皮,每
栗子怎么做(栗子的吃法和做法)这个季节的板栗最好吃,每每路过炒货店的时候,总能闻到阵阵板栗香,馋得我直流口水。说实话,炒货店卖的板栗真贵,一斤最少得二三十元,还不如自己买点生板栗回家做呢!说干咱就干,这不,今天