为什么不是我的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。
为什么不能正常工作?
答
正如我所看到的,你正在停止反应堆在done
函数。一旦收到第一个响应,你的反应堆就会停止。即使有未决的回调,停止反应器也会停止脚本。你需要即兴发挥你的逻辑,看看是否所有的请求都完成了,然后停止反应堆。
treq是基于扭曲的。看看这个documentation了解事件循环/反应器的更多知识
答
你真的不想批量处理10000个请求,然后同时将它们全部关闭 - 这就是你的代码所做的。
检查旧的博客文章,http://as.ynchrono.us/2006/05/limiting-parallelism_22.html
您是否收到任何错误消息?你有没有做过什么事来缩小问题出在哪里? – Chris
你有没有看看[我可以问什么问题?](https://*.com/help/on-topic) - 它说_“寻求调试的帮助帮助(”为什么不是这个代码工作?“)必须包含所需的行为,特定的问题或错误,以及在问题本身中重现问题所需的最短代码;没有明确问题陈述的问题对其他读者无效;请参阅:如何创建最小,完整,和可验证示例。“_ – Clijsters
使用打印语句。 – Elan