В защищенном соединении через веб-сокет, созданном с помощью QWebSocket, отказано
У меня проблема с соединением QWebSocket с C++.
QWebSocket *mWebSocket = new QWebSocket();
connect(mWebSocket, SIGNAL(connected()), this, SLOT(connected()));
connect(mWebSocket, SIGNAL(disconnected()), this, SLOT(disconnected()));
connect(mWebSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
QNetworkRequest lRequest(QUrl("wss://gateway-predix-data-services.run.aws-usw02-pr.ice.predix.io/v1/stream/messages"));
lRequest.setRawHeader("Predix-Zone-Id", <my unique id>);
lRequest.setRawHeader("Authorization", <some token>);
mWebSocket->open(lRequest);
Я получаю 3 ошибки и затем отключаюсь, но никогда не подключаюсь.
вызываемый слот: ошибка
QAbstractSocket::RemoteHostClosedError
вызываемый слот: ошибка
QAbstractSocket::ConnectionRefusedError
вызываемый слот: ошибка
QAbstractSocket::RemoteHostClosedError
вызываемый слот: отключен
Когда я делаю небольшую опечатку в своем токене (для проверки правильности аутентификации), я начинаю получать только ошибку QAbstractSocket::ConnectionRefusedError.
Самое интересное, что я реализовал соединение websocket с python, и оно работает очень хорошо, поэтому проблема не должна быть связана с серверной частью websocket или настройкой заголовка запроса:
import websocket
import thread
import time
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
for i in range(3):
time.sleep(1)
#ws.send('{messageId: 1453338376222,body: [{name: Compressor-2017:CompressionRatio,datapoints: [[1453338376222,10,3],[1453338377222,10,1]],attributes: {host: server1,customer: Acme}}]}')
time.sleep(1)
#ws.close()
print("thread terminating...")
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://gateway-predix-data-services.run.aws-usw02-pr.ice.predix.io/v1/stream/messages",
on_message = on_message,
on_error = on_error,
on_close = on_close,
header = {'Predix-Zone-Id:my unique id', 'Authorization:token'}
)
ws.on_open = on_open
ws.run_forever()
Это соединение с websocket является частью моего C++ sdk, поэтому мне нужно, чтобы оно было реализовано с C++. У вас есть идеи, что я пропустил в своем коде C++?