实例通过aiohttp

时间:2018-07-03 21:04:43

标签: python http aiohttp

我在使用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()>   追溯(最近一次呼叫最近):文件“ main.py”,第213行,在   发射       等待初始化(a,b)文件“ main.py”,第254行,正在初始化       与session.get(URL,allow_redirects = True,proxy = proxy,timeout = 40)异步作为初始文件   “ C:\ Users \ x \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ aiohttp \ client.py”,   第843行,位于 enter       self._resp =等待self._coro文件“ C:\ Users \ x \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ aiohttp \ client.py”,   _request中的第387行       等待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行,在退出       从Nonecurrent.futures._base.TimeoutError引发asyncio.TimeoutError

我真的无法弄清楚为什么要这样做或如何解决它……它一直在崩溃。

我要访问的网站非常可靠,并且我使用的大多数代理都不错。只是随机地,它们都会开始运行,通常在测试50个实例后大约200秒之后。

我曾经用except (ValueError, InvalidURL, ClientConnectionError, ClientHttpProxyError, TimeoutError):捕获错误并用它打印实例号,并且由于我使用的几个代理已失效,因此可能会发生几次,其余的都可以一会儿,他们都会崩溃。我删除了try / except以找出错误的确切原因,现在我注意到曾经失败的实例编号现在从未显示过(每次成功访问站点时我都会打印任务编号) ,然后就像我之前所说的那样崩溃。

我尝试设置timeout=None,但现在它以前曾经向我发送错误消息时,它只是停止并且什么也没有发生。

有人知道我该如何解决吗?

谢谢。

编辑:只是使用proxy=None在较小的规模上进行了相同的测试,但仍然失败。

0 个答案:

没有答案