Почему не работает мой скрипт Python 2.7?
У меня есть этот скрипт с использованием treq в 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()
Почему это не работает?
Мой код должен выполнять этот почтовый запрос, и каждый запрос должен иметь 4-значный пароль (0000...9999). Каждый раз, когда цикл запускается:
если PasswordStart не выполнен и PasswordStart<10001:
Предполагается добавить номер цикла (PasswordStart) в исполняемый массив, чтобы он не перезапускал один и тот же номер дважды. Затем он создаст переменные, а затем установит соединение. Это сохраняет ответ, и ответ проверяется в конце. Если response.code == 200, то он распечатает пароль. Иначе, он будет продолжать проходить цикл и добавлять i+1 и PasswordStart+1.
Почему это не работает?
2 ответа
Как я вижу, вы останавливаете реактор в done
функция. Из-за чего ваш реактор остановится, как только будет получен первый ответ. Остановка реактора остановит ваш сценарий, даже если есть ожидающие обратные вызовы. Вы должны импровизировать свою логику, чтобы увидеть, все ли запросы выполнены, затем остановить реактор.
Treq основан на витой. Проверьте эту документацию для получения дополнительной информации о цикле событий / реакторе
Вы действительно не хотите собирать 10000 запросов, а затем запускать их все одновременно - и это то, что делает ваш код.
Проверьте это старое сообщение в блоге, http://as.ynchrono.us/2006/05/limiting-parallelism_22.html