Я пытаюсь настроить websocket с помощью библиотеки websocket-client, используя python 3.7.В документации поставщика API указано, что требуется базовая аутентификация.
Ниже приведен код, который я использую для подписки на их тестовый канал.Тестовый канал должен отправлять ответы обратно без остановок, пока мы не закроем сокет.
email = b'myemail@domain.com'
pw = b'mypassword'
_str = (base64.b64encode(email + b':' + pw)).decode('ascii')
headerValue = 'Authorization: Basic {0}'.format(_str)
def on_message(ws, msg):
global msg_received
print("Message received: ", msg)
msg_received += 1
if msg_received > 10:
ws.send(json.dumps({"unsubscribe": "/test"}))
ws.close()
def on_error(ws, error):
print("ERROR: ", error)
def on_close(ws):
print("Closing websocket...")
def on_open(ws):
print("Opening...")
ws.send(json.dumps({'subscribe': '/test'}))
time.sleep(1)
if __name__ == '__main__':
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://api-ws.myurl.com/",
header=[headerValue],
on_message=on_message,
on_error=on_error,
on_close=on_close))
ws.on_open = on_open
ws.run_forever()
Когда я запускаю это, я могу видеть заголовки моих запросов и их заголовки ответов, которые показывают, что соединение было обновлено дои мне назначен Sec-Websocket-Accept.Затем веб-сокет немедленно закрывается без каких-либо ответов.
Я попытался сначала отправить запрос post в API входа в систему и сгенерировать sessionID и csrftoken, а затем передать их в виде файлов cookie в объекте websocketapp.Это не сработало.Я пытался передать заголовки как фактический диктат, но это тоже не работает.Я перепробовал слишком много вариантов кодировки b64, и ни одна из них не работает.
Любой совет будет оценен.