diff --git a/API.md b/API.md index 6060366..d7ab460 100644 --- a/API.md +++ b/API.md @@ -15,6 +15,7 @@ можно отправить на сервер без ожидания - `requests_per_second: float = 2.0` - максимальная скорость запросов, которая будет использоваться после переполнения пула +- `ssl: bool = True` - использовать ли проверку SSL-сертификата при HTTP-соединениях с сервером Битрикс. - `client: aiohttp.ClientSession = None` - использовать для HTTP-вызовов клиента, инициализированного и настроенного пользователем. Параметры `request_pool_size` и `requests_per_second` установлены согласно ограничениям Битрикс24. diff --git a/README.md b/README.md index 8896f5c..c766d18 100644 --- a/README.md +++ b/README.md @@ -253,25 +253,9 @@ deals.sort(key = lambda d: int(d['ID'])) Нарушение политики Битриска по скорости запросов влечет за собой штрафы, поэтому мы рекомендуем соблюдать её (параметр `respect_velocity_policy=True`). ### Я получаю ошибку сертификата SSL. Что делать? -Если вы получаете `SSLCertVerificationError` / `CERTIFICATE_VERIFY_FAILED`, попробуйте отключить верификацию сертификата SSL. При инициализации передайте в `BitrixAsync` параметр `client`, где будет инициализированный вами экземпляр `aiohttp.ClientSession`, у которого будет отключена верификация SSL: +Если вы получаете `SSLCertVerificationError` / `CERTIFICATE_VERIFY_FAILED`, попробуйте отключить верификацию сертификата SSL: ```python -import aiohttp -import asyncio - -from fast_bitrix24 import BitrixAsync - - -async def main(): - # Инициализировать HTTP-клиента без верификации SSL и передать его в `BitrixAsync` - connector = aiohttp.TCPConnector(ssl=False) - async with aiohttp.ClientSession(connector=connector) as client: - b = BitrixAsync(webhook, client=client) - - # Далее ваши вызовы Битрикса - ... - - -asyncio.run(main()) +b = BitrixAsync(webhook, ssl=False) ``` ## Я использую вашу библиотеку из ноутбуков или из Spyder и получаю ошибки. Что делать? diff --git a/fast_bitrix24/bitrix.py b/fast_bitrix24/bitrix.py index 207d0b1..3514113 100644 --- a/fast_bitrix24/bitrix.py +++ b/fast_bitrix24/bitrix.py @@ -33,6 +33,7 @@ def __init__( request_pool_size: int = 50, requests_per_second: float = 2.0, client: aiohttp.ClientSession = None, + ssl: bool = True, ): """ Создает объект для запросов к Битрикс24. @@ -47,9 +48,11 @@ def __init__( можно отправить на сервер без ожидания - `requests_per_second: float = 2.0` - максимальная скорость запросов, которая будет использоваться после переполнения пула + - `ssl: bool = True` - использовать ли проверку SSL-сертификата + при HTTP-соединениях с сервером Битрикс. - `client: aiohttp.ClientSession = None` - использовать для HTTP-вызовов объект aiohttp.ClientSession, инициализированнный и настроенный - пользователем. + пользователем. Ожидаеется, что пользователь сам откроет и закроет сессию. """ self.srh = ServerRequestHandler( @@ -57,6 +60,7 @@ def __init__( respect_velocity_policy=respect_velocity_policy, request_pool_size=request_pool_size, requests_per_second=requests_per_second, + ssl=ssl, client=client, ) self.verbose = verbose diff --git a/fast_bitrix24/srh.py b/fast_bitrix24/srh.py index ff3270c..ed901e7 100644 --- a/fast_bitrix24/srh.py +++ b/fast_bitrix24/srh.py @@ -58,6 +58,7 @@ def __init__( request_pool_size: int, requests_per_second: float, client, + ssl: bool = True, ): self.webhook = self.standardize_webhook(webhook) self.respect_velocity_policy = respect_velocity_policy @@ -68,6 +69,7 @@ def __init__( # то будем использовать его клиента self.client_provided_by_user = bool(client) self.session = client + self.ssl = ssl # лимит количества одновременных запросов, # установленный конструктором или пользователем @@ -119,8 +121,12 @@ async def run_async(self, coroutine): async def handle_sessions(self): """Открывает и закрывает сессию в зависимости от наличия активных запросов.""" + + # если клиент был задан пользователем, то ожидаем, + # что пользователь сам откроет и закроет сессию + if self.client_provided_by_user: - yield True + yield return if not self.active_runs and (not self.session or self.session.closed): @@ -128,7 +134,7 @@ async def handle_sessions(self): self.active_runs += 1 try: - yield True + yield finally: self.active_runs -= 1 @@ -157,7 +163,7 @@ async def request_attempt(self, method, params=None) -> dict: logger.debug(f"Requesting {{'method': {method}, 'params': {params}}}") async with self.session.post( - url=self.webhook + method, json=params + url=self.webhook + method, json=params, ssl=self.ssl ) as response: json = await response.json(encoding="utf-8") diff --git a/tests/test_srh.py b/tests/test_srh.py index 5a7b03a..d0b827d 100644 --- a/tests/test_srh.py +++ b/tests/test_srh.py @@ -12,7 +12,7 @@ async def test_request_attempt(): mock_response.json.return_value = {'time': {'operating': 1000}} @contextlib.asynccontextmanager - async def mock_post(url, json): + async def mock_post(url, json, ssl): yield mock_response mock_session = AsyncMock()