import requests import gevent from gevent import monkey; monkey.patch_all(); del monkey import random import time concurrent = 8 delay = 0.5 def get_user_agent(): user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36', ] return random.choice(user_agents) def get_header(): header_template = { 'Content-Type': 'application/json', 'Origin': 'http://yst.fudan.edu.cn', 'Referer': 'http://yst.fudan.edu.cn/hongtan/vote/', } header_template['User-Agent'] = get_user_agent() header_template['X-Forwarded-For'] = get_ip() print 'Using IP:', header_template['X-Forwarded-For'] print 'Using User-Agent:', header_template['User-Agent'] return header_template def ip2long(ip): nums = map(int, ip.split('.')) return (nums[0] << 24) | (nums[1] << 16) | (nums[2] << 8) | nums[3] def long2ip(num): ip = '%d.%d.%d.%d' % (num >> 24, (num >> 16) & 255, (num >> 8) & 255, num & 255) return ip def get_ip(): iprange = [ (ip2long('10.147.0.0'), 1 << 16), (ip2long('10.102.0.0'), 1 << 16), (ip2long('10.222.0.0'), 1 << 16), (ip2long('10.240.0.0'), 1 << 16), (ip2long('10.149.0.0'), 1 << 16), (ip2long('60.176.0.0'), 1 << 20), (ip2long('58.208.0.0'), 1 << 20), (ip2long('36.16.0.0'), 1 << 20), (ip2long('125.112.0.0'), 1 << 20), (ip2long('58.246.0.0'), 1 << 17), (ip2long('112.64.0.0'), 1 << 17), (ip2long('139.226.0.0'), 1 << 17), (ip2long('223.96.0.0'), 1 << 20), (ip2long('221.176.0.0'), 1 << 19), ] r = random.choice(iprange) ip = long2ip(r[0] + random.randint(0, r[1])) return ip def worker(): while True: resp = requests.post(post_url, data=payload, headers=get_header(), timeout=3).json() if "error" in resp: print 'Error:', resp["message"] else: print '%s vote(s) added!' % resp["description"] time.sleep(delay) payload = '["7e4d6963-4aed-44fe-a1d7-90ef3f7f83bd"]' post_url = 'http://yst.fudan.edu.cn/hongtan/vote/api/user/votes/' if __name__ == '__main__': workers = [] for i in xrange(concurrent): workers.append(gevent.spawn(worker)) gevent.joinall(workers)