男主失去女主后黑化(男主失去女主后追悔莫及)
0
2025-02-21
关于[用python实现网络投票系统],网络投票和刷票的原理,今天就分享给大家。如果对你有帮助,别忘了关注这个网站。
分析投票原理作为一个程序员,要不要为自己的人生开一个小G?我们这些熟悉网络请求的人应该从根源上分析问题。一个投票网站。大致分为两类:
登录类:这类网站确实不好操作。一般每个账号每天都能刷几票。因为账户的资源是有限的,我们很难通过获取大量的账户资源来为我们服务。而且登录稍微大一点的工厂或者高技术点都比较复杂,普通人js水平不高的话很难走通这条路。比如很难打开一个需要微信登录和qq登录才能投票的网站。非登录类:不是所有网站都有腾讯的登录授权,很多都有自己的官网,是一个系统。这类网站的普通人可能感觉不到区别:投几票就投不了了。然后我让我的朋友帮我投票。分析这类网站,由于没有登录机制,所以按照ip机制识别。因为正常情况下你的公网ip是比较稳定的。所以一个普通用户只能投固定数量的票。或许再高级一点,他会结合浏览器信息来识别,但这还是比较少见的。既然分析了处理思想的原理,剩下的就是设计程序的问题了。对于一个点击投票事件,其本质是一个http(post)请求,然后在后台修改数据。然后就可以把握这个操作过程,分析是什么样的要求,需要什么参数。然后根据这个请求模拟写一个请求。
然而,最重要的是ip代理。你需要使用代理ip访问那个接口,让对方认为是你的代理ip,然后访问他,所以你需要维护一个代理ip池。对于代理ip池来说,这并不是什么高大上的事情。准确的说,一个收藏里面包含了一些可以被我利用的可用IP。市面上也有很多卖代理IP的,价格也不贵。我用了蘑菇剂。
具体实战的主要流程
正好最近的一次比赛,有一个拉票环节,人工拉票的话效率很低,你肯定不会想天天舔着人家说情。然后自己分析一波!
首先打开你的网站(有些手机电脑很容易抓取调整),Google或者其他浏览器F12抓取包,点击网络和xhr准备(肯定是ajax请求,不用想了)。
分析这个请求的重要参数。(表头)/图像-2/
找到网址和几个参数,就可以准备程序了。模拟需要python的具体细节。因为这是一个多重请求,所以应该考虑性能和效率。不能让异常满天飞,打断,浪费ip,或者苦苦等待。
对于代理ip来说,虽然有一些区别,但基本是一样的。一般都是卖出去的,然后每个ip从一开始用了之后就能用几分钟。而且有的ip不能用,有的延迟高,写程序的时候要过滤掉。我们应该考虑这个程序设计。
多线程:python有一个多线程的全局锁,极大的影响了效率。不过io请求多线程还是有一定的提速。因为io有大量线程在等待。多线程的模块大致定义了一个线程类、一个初始方法和一个运行函数。然后在外面定义几个线程,让它们运行任务。正常ip处理和资源处理的ip代理是随机选择的一组ip作为代理ip,对其进行爬取,然后将该ip从ip池中删除失败。而url链接一般放在一个线程安全的全局容器里,一个一个抛出。Ip在list或redis中维护,并尝试捕捉异常。但是这个刷票只有一个网址。并且一个ip只能被使用有限的次数。所以换个说法,url不需要容器维护。Ip最好由队列维护,python的队列是线程安全的。所以整个程序的结构非常清晰。只需要用一个队列来解析ip获取的格式,并进行相应的存储。然后被消费,当小于一定数量时,请求api获取ip进行填充。预处理方面,另一个蘑菇代理用ip池也有类似问题,可以提前借鉴。代码示例Python导入请求导入随机导入时间从队列导入线程导入队列Def Load ip (): # #从代理ip获取ip并一次多次展开到队列中URL 2 = ' http://piping . mogumiao . com/proxy/API/Get _ IP _ al?appKey = f 16367295 e 284173 AE 450 f & amp;计数= 20 & ampexpiryDate = 0 & amp格式= 1 & ampnewLine = 2 ' req = requests . get(URL 2)date = req . JSON()if(date
java中java的棘手之处在于,java本身不方便处理json和http请求,需要借助第三方jar,有些操作略显繁琐。
首先,java要明确几点:
代理模式:java主要有两种代理模式,一种是jdk全局代理,一种是net包下的Proxy代理。对于多线程程序和ip只能用一次的,当然用net的proxy代理。解析json通过api获取ip,格式固定。您需要用fastjson解析json字符串来获得所需的信息。线程安全问题。可以使用线程安全的blockqueue,当然实际上也可以在操作队列的方法中加入synchronized关键字。您可以定义一个固定线程,每个线程有多个任务。也可以用一个线程池定义多个线程类,每个线程完成一个任务。虽然可以通过urlconnection实现网络请求,但是太复杂了,远比jsoup复杂。所以这里用的是jsoup。鉴于以上问题。写了一个demo测试准备,为api获取ip,大致是这个格式。
首先,你需要下载fastjson和jsoup的jar包。或者加入maven依赖。(jar包可以在maven官网下载)
& lt!——https://mvnrepository.com/artifact/org.jsoup/jsoup->;& lt依赖性& gt& ltgroupId & gtorg . j soup & lt;/groupId & gt;& ltartifactId & gtjsoup & lt/artifact id & gt;& lt版本& gt1 . 12 . 1 & lt;/version & gt;& lt/dependency & gt;& lt!——https://mvnrepository.com/artifact/com.alibaba/fastjson->;& lt依赖性& gt& ltgroupId & gtcom .阿里巴巴& lt/groupId & gt;& ltartifactId & gtfastjson & lt/artifact id & gt;& lt版本& gt1 . 2 . 58 & lt;/version & gt;& lt/dependency & gt;
然后写个演示运行。
包com . big sai;导入com . Alibaba . fast JSON . JSON;导入com . Alibaba . fast JSON . JSON array;导入com . Alibaba . fast JSON . JSON object;导入Java . util . concurrent . executorservice;导入Java . util . concurrent . executors;公共类test 2 { static int va = 1;公共静态void main(字符串
综上所述,写一个爬虫或者python,方便简单。因为py对json的支持更好(dictionary),而java对强对象类型有严格的语法要求。但在多线程方面,java必须干掉py。因为py的多线程是(伪)多线程。如果想提高速度,可以研究多个流程。
这种题本质上不难,做一遍就很简单了。这只是其中一种情况。提供一些思路和解决方案。遇到不同的问题,可能需要不同的结构和方式去解决,这就需要整合。
如有错误,请指正。