SSL not available
Моя программа использует websocket
модуль и WebSocketApp
класс для соединения с Binance WebSocket API. Вот код с помощью которого я делаю это:
class WebSocketListener:
def __init__(
self,
url: str = "wss://stream.binance.com:9443/ws/casper"
):
self.__websocket = WebSocketApp(
url=url,
on_open=self.__on_open,
on_message=self.__on_message,
on_error=self.__on_error,
on_close=self.__on_close
)
def launch_websocket(self):
self.__websocket.run_forever()
До сих пор всё работало отлично: я ничего особенного не менял, просто перестало работать. Не могу запустить программу, потому что постоянно возникает эта ошибка при запуске:
Status code: 59; message: WebSocket error received: SSL not available.
WebSocketListener.__on_close() missing 2 required positional arguments: 'code' and 'msg'
Из моего callback метода:
@staticmethod
def __on_error(ws: WebSocketApp, exception: Exception):
raise CasperError(error={
"msg": f"WebSocket error detected: {exception}",
"code": StatusCodes.API_ERROR.value
})
Впервые я столкнулся с этой ошибкой, когда писал проект на Linux (в PyCharm IDE). Решением стало создание нового проекта с локальным окружением и перенос всех скриптов туда. Это было довольно глупо, но, как по волшебству, ошибка на какое-то время исчезла, пока однажды не появилась снова, и создание нового проекта не помогло. Тогда я решил создать новый проект на Windows, но при запуске программы возникла та же ошибка. Теперь я не знаю, что делать, потому что запросы Rest API работают нормально, как и всё остальное. Похоже, что-то случилось с моим вебсокетом.
UPD: минимально необходимый код для воспроизведения ошибки:
import time
from queue import Queue
from threading import Event
from websocket import WebSocketApp
class WebSocketListener:
def __init__(
self,
url: str = "wss://stream.binance.com:9443/ws/casper"
):
self.__websocket = WebSocketApp(
url=url,
on_open=self.__on_open,
on_message=self.__on_message,
on_error=self.__on_error,
on_close=self.__on_close
)
def __on_open(self, ws: WebSocketApp):
print("WebSocket is open!")
def __on_message(
self,
ws: WebSocketApp,
ws_msg: str
):
...
def __on_close(
self,
ws: WebSocketApp,
code: int,
msg: str
):
print(f"WebSocket is closed. {code} {msg}")
@staticmethod
def __on_error(ws: WebSocketApp, exception: Exception):
print(exception)
def launch_websocket(self):
self.__websocket.run_forever()
def close_websocket(self):
self.__websocket.close()
self.__websocket = None
if __name__ == "__main__":
ws_listener = WebSocketListener()
ws_listener.launch_websocket()
# waiting for a little bit for an error to occur
time.sleep(4)
UPD requirements.txt
:
certifi==2025.7.14
charset-normalizer==3.4.2
docopt==0.6.2
idna==3.10
pipreqs==0.4.13
requests==2.32.4
urllib3==2.5.0
yarg==0.1.10