为什么不是我的Python 2.7脚本工作?

为什么不是我的Python 2.7脚本工作?

问题描述:

我使用TREQ在Python 2.7这个脚本,但它并没有发出请求:为什么不是我的Python 2.7脚本工作?

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 Request,每个请求应该有一个4位密码(0000 ... 9999)。每次循环运行:

如果不执行PasswordStart和PasswordStart < 10001:

它应该加上执行数组中的环数(PasswordStart),所以它不会重新运行相同的数字两次。然后它将制作变量,然后进行连接。它保存了响应,并在最后检查响应。如果response.code == 200,那么它会打印出密码。否则,它将继续循环并添加i + 1和PasswordStart + 1。

为什么不能正常工作?

+0

您是否收到任何错误消息?你有没有做过什么事来缩小问题出在哪里? – Chris

+3

你有没有看看[我可以问什么问题?](https://*.com/help/on-topic) - 它说_“寻求调试的帮助帮助(”为什么不是这个代码工作?“)必须包含所需的行为,特定的问题或错误,以及在问题本身中重现问题所需的最短代码;没有明确问题陈述的问题对其他读者无效;请参阅:如何创建最小,完整,和可验证示例。“_ – Clijsters

+0

使用打印语句。 – Elan

正如我所看到的,你正在停止反应堆在done函数。一旦收到第一个响应,你的反应堆就会停止。即使有未决的回调,停止反应器也会停止脚本。你需要即兴发挥你的逻辑,看看是否所有的请求都完成了,然后停止反应堆。

treq是基于扭曲的。看看这个documentation了解事件循环/反应器的更多知识

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

检查旧的博客文章,http://as.ynchrono.us/2006/05/limiting-parallelism_22.html