为什么我的Python 2.7脚本不起作用?

时间:2017-04-18 15:06:07

标签: python python-2.7 twisted

我在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.

为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

我可以看到,你正在done函数中停止反应堆。一旦收到第一反应,您的反应堆将立即停止。即使存在待处理的回调,停止反应器也会停止脚本。您需要即兴创建逻辑以查看是否已完成所有请求,然后停止reactor。

treq基于扭曲。有关事件循环/反应堆的更多信息,请查看此documentation

答案 1 :(得分:0)

你真的不想批量处理10000个请求,然后同时将它们全部关闭 - 这就是你的代码正在做的事情。

查看此旧帖子http://as.ynchrono.us/2006/05/limiting-parallelism_22.html