34嘻刷刷
来源:互联网 发布:知乎搜索引擎地址 编辑:程序博客网 时间:2024/04/30 10:37
题目地址:http://www.qlcoder.com/task/7581
题目描述:
现在的互联网上充斥着非常大量的虚假信息,比如:
- 微博僵尸粉
- 淘宝刷单
- 知乎刷赞
- 垃圾邮件
任何一个UGC性质的网站都需要做好一个基本功:识别哪些是真实用户沉淀的内容,哪些是程序模拟真实用户产生的恶意行为。
一般各个公司都会有一个专门的anti-spam team,而若远同学就是其中一员,专注防刷30年……
这里有一个颜值最高coder评选排行榜。
用户可以上传他认为颜值最高的coder的名字及其头像,并为他点赞,当被点赞数超过1000的coder,通过此题。
当然,一般点赞这种行为会设计一个验证码来区别您是普通人还是机器。
我们网站是coder专享的,验证码当然会难一点啦~
这里的验证码是一个自然数x,使得md5(当天日期+你的用户名+当前的票数+x)的前6位都是0。
举例: 假如2015年12月4号食年已经拿到了1014票,当想投食年第1015票的时候,验证码可以是12011618。
因为20151204shinian101412011618的md5值是0000003A19CF73CF3E9799219A9FFF4F,这个md5前6位都是0。
当你的票数超过1000,再次投票即可看见答案。
方案设计
import hashlibimport urllib.parseimport urllib.request# 当前的日期date = '20170919'# 用户名username = '方程同调士'# 当前的票数count = 0while count<1002: x = 0 string = date + username + str(count) + str(x) md5 = hashlib.md5(string.encode('utf-8')).hexdigest() while md5[:6] != '000000': x = x + 1 string = date + username + str(count) + str(x) md5 = hashlib.md5(string.encode('utf-8')).hexdigest() # 构造url print("第"+str(count)+"个checkcode="+str(x)) params = urllib.parse.urlencode({ "_token" : "z3aUUKwf05BdwAOyauTS452Sy4X68MgoPYhxhBSo", "user" : username, "checkcode" : str(x) }) url = "http://www.qlcoder.com/train/handsomerank?" + params header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'} req = urllib.request.Request(url,headers=header) res=urllib.request.urlopen(req) html = res.read() if count==1001: print(res.decode(encoding='utf-8')) count = count + 1
阅读全文
0 0
- 34嘻刷刷
- OJ 嘻刷刷 我想放假
- 喜刷刷
- 喜刷刷
- 速度刷刷的.
- 洗刷刷,呜呜,刷刷
- leetcode 刷刷刷
- 千里码-刷刷刷
- 有空就刷刷
- 刷刷笔试题~~[递归]
- 【千里码】Task34-喜刷刷
- 刷刷笔试题~~[概率]
- 刷刷笔试题~~[数组]
- 刷刷笔试题~~[sql]
- 刷刷笔试题~~ [Java]
- 刷刷笔试题~~[矩阵]
- 刷刷笔试题~~[操作系统!!!]
- 刷刷水题
- 非空判断
- 卷积(通俗解释)
- 自定义 actionbar 两边有空隙问题
- TP5 基础说明
- LabVIEW 程序的内存优化
- 34嘻刷刷
- Android 实现圆角按钮(selector和shape的简单用法)
- Linux 的crontab定时任务进行接口调用
- Rotate List
- BigDecimal和NumberFormat四舍五入的区别
- vue编程式导航
- java中的抽象类
- sudo sh -c 'echo 4 > test_rw'
- spring-bean的作用域