0

Моя программа использует 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
Dev18
2,8695 золотых знаков28 серебряных знаков59 бронзовых знаков
задан 26 июл. 2025 в 13:52
5
  • ошибка исчезла после того как я скачал websocket-client package. Я использую python 3.13 Commented 26 июл. 2025 в 16:10
  • Как оно у вас вообще без неё запускалось? У меня не захотело, сказало ImportError: cannot import name 'WebSocketApp' from 'websocket', поставил библиотеку и всё завелось (python 3.8). Commented 26 июл. 2025 в 16:17
  • у меня была установлена websocket-client-py3 Commented 26 июл. 2025 в 16:27
  • 1
    @gooduser, ответы нужно добавлять в ответы, а не править заголовок. Commented 27 июл. 2025 в 12:33
  • Если вы в России, каким сервисом VPN пользуетесь? Без VPN ваше приложение вообще не смогло соединиться, [Errno 110] Connection timed out, с VPN подключилось нормально, без ошибок. Commented 27 июл. 2025 в 17:52

0

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.