我在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()
为什么它不起作用?
我的代码应该做的是运行此发布请求,每个请求应该有一个4位密码(0000 ... 9999)。每次循环运行:
如果PasswordStart未执行且PasswordStart&lt; 10001:
应该在执行的数组中添加循环编号(PasswordStart),因此它不会重新运行两次相同的数字。然后它将生成变量然后进行连接。它保存响应并在最后检查响应。如果response.code == 200,那么它将打印出密码。否则,它将继续循环并添加i + 1和PasswordStart + 1.
为什么这不起作用?
答案 0 :(得分:0)
我可以看到,你正在done
函数中停止反应堆。一旦收到第一反应,您的反应堆将立即停止。即使存在待处理的回调,停止反应器也会停止脚本。您需要即兴创建逻辑以查看是否已完成所有请求,然后停止reactor。
答案 1 :(得分:0)
你真的不想批量处理10000个请求,然后同时将它们全部关闭 - 这就是你的代码正在做的事情。
查看此旧帖子http://as.ynchrono.us/2006/05/limiting-parallelism_22.html