我在使用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
进行了相同的小规模测试,但仍然失败了 .