Не могу запустить бота с aiogram, скорее всего проблема в aiohttp
Я не могу запустить бота в aoigram
Выдает ошибку:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/aiohttp/connector.py", line 946, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs) # type: ignore # noqa
File "/usr/lib/python3.8/asyncio/base_events.py", line 1017, in create_connection
raise exceptions[0]
File "/usr/lib/python3.8/asyncio/base_events.py", line 1002, in create_connection
sock = await self._connect_sock(
File "/usr/lib/python3.8/asyncio/base_events.py", line 916, in _connect_sock
await self.sock_connect(sock, address)
File "/usr/lib/python3.8/asyncio/selector_events.py", line 485, in sock_connect
return await fut
File "/usr/lib/python3.8/asyncio/selector_events.py", line 490, in _sock_connect
sock.connect(address)
OSError: [Errno 101] Network is unreachable
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/aiogram/bot/api.py", line 103, in make_request
async with session.post(url, data=req, **kwargs) as response:
File "/usr/local/lib/python3.8/dist-packages/aiohttp/client.py", line 1083, in __aenter__
self._resp = await self._coro
File "/usr/local/lib/python3.8/dist-packages/aiohttp/client.py", line 490, in _request
conn = await self._connector.connect(
File "/usr/local/lib/python3.8/dist-packages/aiohttp/connector.py", line 528, in connect
proto = await self._create_connection(req, traces, timeout)
File "/usr/local/lib/python3.8/dist-packages/aiohttp/connector.py", line 868, in _create_connection
_, proto = await self._create_direct_connection(
File "/usr/local/lib/python3.8/dist-packages/aiohttp/connector.py", line 1023, in _create_direct_connection
raise last_exc
File "/usr/local/lib/python3.8/dist-packages/aiohttp/connector.py", line 999, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
File "/usr/local/lib/python3.8/dist-packages/aiohttp/connector.py", line 953, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host api.telegram.org:443 ssl:default [Network is unreachable]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/anatoliy/Документы/Coding/Bots/Telegram/Орел_Решка_Bot/bot.py", line 21, in <module>
executor.start_polling(dp)
File "/usr/local/lib/python3.8/dist-packages/aiogram/utils/executor.py", line 41, in start_polling
executor.start_polling(reset_webhook=reset_webhook, timeout=timeout, relax=relax, fast=fast)
File "/usr/local/lib/python3.8/dist-packages/aiogram/utils/executor.py", line 309, in start_polling
loop.run_until_complete(self._startup_polling())
File "/usr/lib/python3.8/asyncio/base_events.py", line 608, in run_until_complete
return future.result()
File "/usr/local/lib/python3.8/dist-packages/aiogram/utils/executor.py", line 360, in _startup_polling
await self._welcome()
File "/usr/local/lib/python3.8/dist-packages/aiogram/utils/executor.py", line 350, in _welcome
user = await self.dispatcher.bot.me
File "/usr/local/lib/python3.8/dist-packages/aiogram/bot/bot.py", line 27, in me
setattr(self, '_me', await self.get_me())
File "/usr/local/lib/python3.8/dist-packages/aiogram/bot/bot.py", line 176, in get_me
result = await self.request(api.Methods.GET_ME, payload)
File "/usr/local/lib/python3.8/dist-packages/aiogram/bot/base.py", line 200, in request
return await api.make_request(self.session, self.__token, method, data, files,
File "/usr/local/lib/python3.8/dist-packages/aiogram/bot/api.py", line 106, in make_request
raise exceptions.NetworkError(f"aiohttp client throws an error: {e.__class__.__name__}: {e}")
aiogram.utils.exceptions.NetworkError: Aiohttp client throws an error: ClientConnectorError: Cannot connect to host api.telegram.org:443 ssl:default [Network is unreachable]
Код программы:
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
bot = Bot('<token>')
dp = Dispatcher(bot)
@dp.message_handler(commands=['start', 'help'])
async def start_command(message: types.Message):
await message.reply('Тест')
executor.start_polling(dp)
Версия питона: 3.8
Ответы (4 шт):
Аналогичная проблема и у меня, тут трабл именно в aiohttp который делает запросы с проверкой ssl сертификата. При отдельных запросах это решается добавлением метапараметра ssl=False: sync with session.get('https://habr.com/ru/post/337420', ssl=False) as response:
Твою проблему решит новая версия: aiohttp==3.7.1
Тебе нужно открыть папку с установленными пакетами, найти там папки:
aiogram > bot
Там будут 2 файла - это api.py и base.py.
В base.py найди строку async with session.get(url, timeout=timeout, proxy=self.proxy, proxy_auth=self.proxy_auth) as response и вставь в параметры ssl=False.
А в файле api.py - найди строку async with session.post(url, data=req, **kwargs) as response и аналогичным образом добавь в парамеры ssl=False.
Это все что нужно, но рекомендую использовать этот метод только для локального использования или тестирования как быстрый аппроач, так как это вмешательство в библиотеку. При обновлении либы - все станет как было.
Мне помогло добавить проксирование, так как в aiogram используется aiohttp для запросов. Чтобы узнать адрес для проксирования: echo "$http_proxy". Этот адрес нужно вставить в бота:
PROXY_URL = '<your_proxy_url>'
bot = Bot(token=API_TOKEN, proxy=PROXY_URL)
Если используете MacBook, то напишите в консоли
Applications > Python3.* > Install Certificates.command