我正在尝试使用python 3.7使用websocket-client库设置websocket。 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()
运行此命令时,我可以看到我的请求标头以及它们的响应标头,这些标头显示该连接已升级到Websocket,并且为我分配了Sec-Websocket-Accept。然后,网络套接字立即关闭,没有任何响应通过。
我尝试过先向登录api发送发布请求,并生成sessionID和csrftoken,然后将其作为cookie传递到websocketapp对象中。没用我尝试过将标头作为实际的dict传递,但这也不起作用。我尝试了太多的b64编码变体,但没有一个起作用。
任何建议将不胜感激。