为什么我的python2.7脚本不起作用?

2024-10-04 05:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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。你知道吗

为什么这样不行?你知道吗


Tags: importjsondataiftimepasswordhashhashlib
2条回答

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

查看这篇老博文http://as.ynchrono.us/2006/05/limiting-parallelism_22.html

如我所见,您正在done函数中停止reactor。因此,一旦收到第一个反应,你的反应堆就会停止。停止reactor将停止脚本,即使存在挂起的回调。你需要即兴发挥你的逻辑,看看是否所有的要求完成,然后停止反应堆。你知道吗

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

相关问题 更多 >