我在使用aiohttp时遇到了一些问题 . 我正在尝试使用它来监控网站的内部重定向 . 我检查了页面的网络选项卡,看起来他们每30秒左右发出一次GET请求,并且GET请求包含一些cookie . 然后服务器决定这些cookie是否正确,如果是,则重定向,否则你只是等待 .

这是我目前的代码:

def launch():
    passed = False
    headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.9',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive',
            'Pragma': 'no-cache',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }

    async with ClientSession(headers=headers) as session:
        while passed is False:
                    async with session.get(url, allow_redirects=True, proxy=proxy, timeout=40) as initial:
                        status = await get_status(await initial.text())  # Check HTML for status
                        if status == "success": 
                            logging.info("[{}] {}.".format(task_number, "Success"))
                            passed = True
                        await asyncio.sleep(30)


if __name__ == "__main__":
    tasks = []
    loop = asyncio.get_event_loop()
    for i in range(instances):
        task = asyncio.ensure_future(launch())
        tasks.append(task)
    loop.run_until_complete(asyncio.wait(tasks))

我正在使用一些我知道其中大部分功能正常并且运行良好的代理 . 但是,每次运行我的代码时,它都会发出错误X次(其中X是实例数) . 这是它说的:

20:49:24.246未来从未检索到任务异常:exception = TimeoutError()> Traceback(最近一次调用最后一次):文件“main.py”,第213行,在启动等待初始化(a,b)文件“main . py“,第254行,初始化async,其中session.get(url,allow_redirects = True,proxy = proxy,timeout = 40)为initial:文件”C:\ Users \ x \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ aiohttp \ client.py“,第843行,在aenter self._resp = await self._coro文件”C:\ Users \ x \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ aiohttp \ client.py“,第387行,在_request中等待resp.start(conn)文件”C:\ Users \ x \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ aiohttp \ client_reqrep.py “,第761行,在启动self._continue =无文件”C:\ Users \ x \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ aiohttp \ helpers.py“,第677行,在退出加注来自None concurrent.futures._base.TimeoutError的asyncio.TimeoutError

我无法弄清楚它为什么这样做或如何解决它...它只是一直在破碎 .

我正在尝试访问的网站非常可靠,我使用的大多数代理都很好 . 随机地,所有这些都将开始运行,通常在测试50个实例后大约200秒 .

我曾经用 except (ValueError, InvalidURL, ClientConnectionError, ClientHttpProxyError, TimeoutError): 捕获错误并用它打印实例编号,因为有几个代理我注意到以前失败的实例编号现在从未显示(我每次访问时都打印了任务编号)该网站成功),然后它像我之前说的那样崩溃 .

我尝试设置 timeout=None 但是现在当它之前发生了错误的垃圾邮件时,它就会停止并且没有任何反应 .

有谁知道如何解决这个问题?

谢谢 .

编辑:刚刚用 proxy=None 进行了相同的小规模测试,但仍然失败了 .