@Maxwell012

Как исправить ошибки с ssl(aiohttp)?

При использовании aiohttp получаю много ошибок связанных с ssl, при использовании других библиотек этих ошибок нет.
Немного статистики собраной мной:
  • Aiohttp: обработал из 9744 ссылок, 8705
  • Async httpcore: обработал из 9744 ссылок, 9198

Не совсем понимаю в чем дело и почему такая разница. Ошибки которые возникали при работе с aiohttp (основные ошибки на которые я обратил внимание):
  • aiohttp.client_exceptions.ClientConnectorError - 218
  • aiohttp.client_exceptions.ClientConnectorSSLError - 73

Мой код:
async def log_aiohttp_requests(session, url):
    try:
        async with session.get(url) as response:
            if response.status == 200:
                return response
    except Exception as ex:
        logger_aiohttp_requests.error(f"{ex} | {url}", exc_info=True)
        return None


async def log_test_aiohttp(urls, limit, timeout, ssl):
    timeout = aiohttp.ClientTimeout(timeout)
    connector = aiohttp.TCPConnector(limit=limit, ssl=ssl)
    async with aiohttp.ClientSession(timeout=timeout, connector=connector) as session:
        result = await asyncio.gather(*[log_aiohttp_requests(session, url) for url in urls])
    return result

Трассировка каждой ошибки:
1)
__aiohttpRequests__ 2023-03-30 22:12:30,802 ERROR Cannot connect to host sawan.no:443 ssl:default [The remote computer refused the network connection] | https://sawan.no/
Traceback (most recent call last):
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 980, in _wrap_create_connection
    return await self._loop.create_connection(*args, **kwargs)  # type: ignore[return-value]  # noqa
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program files\Python\Lib\asyncio\base_events.py", line 1079, in create_connection
    raise exceptions[0]
  File "D:\Program files\Python\Lib\asyncio\base_events.py", line 1063, in create_connection
    sock = await self._connect_sock(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program files\Python\Lib\asyncio\base_events.py", line 967, in _connect_sock
    await self.sock_connect(sock, address)
  File "D:\Program files\Python\Lib\asyncio\proactor_events.py", line 726, in sock_connect
    return await self._proactor.connect(sock, address)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program files\Python\Lib\asyncio\windows_events.py", line 841, in _poll
    value = callback(transferred, key, ov)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program files\Python\Lib\asyncio\windows_events.py", line 628, in finish_connect
    ov.getresult()
ConnectionRefusedError: [WinError 1225] The remote computer refused the network connection

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\programming\freelance\couting_pages\new_scripts\main.py", line 90, in log_aiohttp_requests
    async with session.get(url) as response:
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\client.py", line 1141, in __aenter__
    self._resp = await self._coro
                 ^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\client.py", line 536, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 540, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 901, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 1206, in _create_direct_connection
    raise last_exc
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 1175, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 988, in _wrap_create_connection
    raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host sawan.no:443 ssl:default [The remote computer refused the network connection]


2)
__aiohttpRequests__ 2023-03-30 22:12:50,641 ERROR Cannot connect to host nocc.no:443 ssl:default [[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:992)] | https://nocc.no/
Traceback (most recent call last):
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 980, in _wrap_create_connection
    return await self._loop.create_connection(*args, **kwargs)  # type: ignore[return-value]  # noqa
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program files\Python\Lib\asyncio\base_events.py", line 1106, in create_connection
    transport, protocol = await self._create_connection_transport(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program files\Python\Lib\asyncio\base_events.py", line 1139, in _create_connection_transport
    await waiter
  File "D:\Program files\Python\Lib\asyncio\sslproto.py", line 574, in _on_handshake_complete
    raise handshake_exc
  File "D:\Program files\Python\Lib\asyncio\sslproto.py", line 556, in _do_handshake
    self._sslobj.do_handshake()
  File "D:\Program files\Python\Lib\ssl.py", line 979, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:992)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\programming\freelance\couting_pages\new_scripts\main.py", line 90, in log_aiohttp_requests
    async with session.get(url) as response:
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\client.py", line 1141, in __aenter__
    self._resp = await self._coro
                 ^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\client.py", line 536, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 540, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 901, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 1206, in _create_direct_connection
    raise last_exc
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 1175, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\programming\freelance\couting_pages\venv\Lib\site-packages\aiohttp\connector.py", line 984, in _wrap_create_connection
    raise ClientConnectorSSLError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorSSLError: Cannot connect to host nocc.no:443 ssl:default [[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:992)]

Как я могу избежать этих ошибок?
  • Вопрос задан
  • 499 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы