我为一个CTF游戏写了一个异步蛮力脚本,看起来像这样
async def bound_fetch(sem, session, answer):
# generating url, headers and json ...
async with sem, session.post(url=url, json=json, headers=headers) as response:
if response.status == 200:
print('Right answer found: %s' % json['answer'])
async def run(words):
tasks = []
sem = asyncio.Semaphore(3)
async with aiohttp.ClientSession() as session:
for word in words:
task = asyncio.create_task(bound_fetch(sem=sem, session=session, answer=''.join(word)))
tasks.append(task)
print("Generated %d possible answers. Checking %s" % (len(tasks), base_url))
await asyncio.gather(*tasks)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(run(possible_answers))
loop.run_until_complete(future)
我想知道这是否是在AIOHTTP中做这件事的正确方法,或者我是否把事情弄得太复杂了(因为我不需要处理所有的响应,只是为了知道哪一个状态为200)?当条件(状态代码)满足时,如何取消处理?