Python - Websockets Невозможно проверить мой сеанс - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь подключиться к серверу веб-сокетов, чтобы отправить сообщение, однако я не могу подключиться из-за того, что он не устанавливает сеанс. Я использовал модуль запросов для входа на сайт и теперь использую модуль websockets для подключения. Я попытался предоставить правильные заголовки, как показано в приведенном ниже коде, включая ранее существующий Sec-WebSocket-Key, который я отсканировал в одном из запросов, сделанных в моем браузере Chrome. Он все еще не проверяет сеанс, а затем отключает меня от сервера websockets. Как успешно подключиться к серверу веб-сокетов для отправки команд?

Мой код Python:

headers =  {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:65.0) Gecko/20100101 Firefox/65.0",
                "Accept-Encoding": "gzip, deflate, br", "Referer": "https://bigboibets.com/",
                "Cookie": "PHPSESSID=" + Client.PHPSESSID + "; hasVisited=true", "TE": "Trailers"}
    Response = Client.Session.post(Client.Endpoints.WSAuthLink, headers=headers)
    WSAuthLink = str(Response.text)
    Response = Client.Session.get(WSAuthLink)
    WSSessionKey = WSAuthLink.split("SessionKey=")[1]

    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:65.0) Gecko/20100101 Firefox/65.0",
               "Accept-Encoding": "gzip, deflate, br",
               "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
               "Accept-Language": "en-US,en;q=0.5",
               "Cache-Control": "no-cache",
               "Connection": "keep-alive",
               "Pragma": "no-cache",
               "Sec-WebSocket-Key": "9mq6jY7920lb9KF3bBb8vQ==",
               "Sec-WebSocket-Extentions": "permessage-deflate",
               "Upgrade": "websocket",
               "Sec-WebSocket-Version": "13",
               "Host": "pm3.bigboibets.com:2083",
               "Origin": "https://pm3.bigboibets.com:2053"}


    ws = create_connection("wss://pm3.bigboibets.com:2083/", header=headers)
    ws.send(json.dumps({"Response":"Session","PC":"CA15818A","Version":"6.04","Language":"0","SitePassword":"root","ID":"","PNum":1}))
    result =  ws.recv()
    print (result)
    ws.send(json.dumps({"Response":"LoginRequest","Player":"USERNAME","ID":"0000049A","PNum":2}))
    result =  ws.recv()
    print (result)
    ws.close()

Выход:

{"Command":"Message","Text":"Session expired. Refresh your browser page and login again.","Disconnect":"Yes"}
Traceback (most recent call last):
  File "C:\Users\Brandon\Desktop\BBB Bot.py", line 123, in <module>
    LoginAccount("USERNAME", "PASSWORD")
  File "C:\Users\Brandon\Desktop\BBB Bot.py", line 43, in LoginAccount
    RetrieveAccountData()
  File "C:\Users\Brandon\Desktop\BBB Bot.py", line 67, in RetrieveAccountData
    AuthWSSession(WSSessionID)
  File "C:\Users\Brandon\Desktop\BBB Bot.py", line 110, in AuthWSSession
    result =  ws.recv()
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_core.py", line 313, in recv
    opcode, data = self.recv_data()
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_core.py", line 330, in recv_data
    opcode, frame = self.recv_data_frame(control_frame)
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_core.py", line 343, in recv_data_frame
    frame = self.recv_frame()
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_core.py", line 377, in recv_frame
    return self.frame_buffer.recv_frame()
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line 361, in recv_frame
    self.recv_header()
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line 309, in recv_header
    header = self.recv_strict(2)
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line 396, in recv_strict
    bytes_ = self.recv(min(16384, shortage))
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_core.py", line 452, in _recv
    return recv(self.sock, bufsize)
  File "C:\Users\Brandon\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websocket\_socket.py", line 112, in recv
    "Connection is already closed.")
websocket._exceptions.WebSocketConnectionClosedException: Connection is already closed.

Выходные данные показывают, что после 1 запроса отправляется ответ об истечении сеанса, а затем делается вторая попытка, но соединение с конечной точки было закрыто. Это означает, что отправляемые мной заголовки неверны, хотя я отправляю ранее использованный Sec-WebSocket-Key с другими заголовками, которые, скорее всего, даже не нужны.

Конечная точка, к которой я пытаюсь подключиться: wss: //pm3.bigboibets.com: 2083 /

Снимок экрана с заголовками запросов, которые я нашел

Как мне установить соединение с сервером веб-сокетов и отправлять подобные запросы в браузере Chrome?

Журналы фреймов websocket в браузере Chrome

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...