我正在尝试用 python 编写一个 websocket 程序来监听服务器消息并打印它们。由于我是 websockets 的新手,我尝试使用 websocket-client 上给出的代码开始github页面。特别是 javascript 之类的 API。但是,我收到此错误:
[Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
我想使用 https,但我不希望 ssl 验证失败时标记错误。我试图寻找可以在程序中指定它的方法,但我找不到这方面的任何文献。请帮忙!
class websocketIO:
def __init__(self, protocol, host, port):
self.ws = None
self.openCallback = None
self.protocol = "ws"
if protocol == "https:":
self.protocol = "wss"
self.host = host
self.port = port
self.messages = {}
def open(self, callback):
print self.protocol + "://" + self.host + ":" + self.port
self.ws = websocket.WebSocketApp(self.protocol + "://" + self.host + ":" + self.port, on_message = self.on_message, on_error = self.on_error, on_close = self.on_close)
self.openCallback = callback
self.ws.on_open = self.on_open;
self.ws.run_forever()
def on_open(self, ws):
threading.start_new_thread(self.openCallback, ())
def on_message(self, ws, message):
if isinstance(message, str):
msg = json.loads(message)
if msg['func'] in self.messages:
self.messages[msg['func']](msg['data'])
else:
print "Error: message is not a binary string"
def run(self, *args):
self.ws.on_open = args[0]
def on(self, name, callback):
self.messages[name] = callback
def emit(self, name, data):
message = {'func': name, 'data': data}
self.ws.send(json.dumps(message))
def main():
global wsio
wsio = websocketIO("https:", "localhost", "9090")
wsio.on('setupDisplayConfiguration', setupDisplayConfiguration)
wsio.on('initialize', initialize)
wsio.open(on_open)
def on_open():
global wsio
wsio.emit('Message1', {'Test': "Data"});
print "Message Sent"
def setupDisplayConfiguration(data):
print (data['host'] + ":" + str(data['port']))
def initialize(data):
print (data['address'])
main()
最佳答案
您通过 SSL 与您的客户端连接到本地主机。我怀疑您是否在本地主机上使用了一个证书,该证书可以根据您信任的 CA 进行验证,并且还与本地主机的主机名相匹配。你检查了吗?
关于python - 尝试使用 websocket-client 建立 https 连接时出现 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900539/