Python Websocket安全[SSL:CERTIFICATE_VERIFY_FAILED](_ssl.c:777)

时间:2018-02-12 05:31:34

标签: python python-3.x ssl websocket ssl-certificate

我制作的程序需要从WebSocket安全服务器接收实时消息。

我尝试使用JavaScript完成此任务,它的工作非常好! 但JavaScript并不能满足我的项目需求。所以我试图在Python中做同样的事情。但没有成功。

我努力解决的错误是:

  

[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:777)

我认为JavaScript没有出现此问题,因为它使用浏览器来验证连接。

我正在使用的内容:

  • Python 3.6.4
  • Anaconda3
  • Windows 10

我真的不知道该怎么做。我已经搜索了很多 我可以通过更改代码来解决这个问题吗? 我应该使用另一个lib进行连接吗? 是Python还是Anaconda的问题? 是不是我能解决的一些新手错误?

这是我的Python代码:

import websocket
import websocket
import threading
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)
            data = ws.recv()
            print(data)
        time.sleep(1)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())



websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws/bnbbtc@ticker",
                            on_message = on_message,
                            on_error = on_error,
                            on_close = on_close)
ws.on_open = on_open

ws.run_forever()

如果有人有兴趣,这是我的JavaScript代码:

var socket = new WebSocket('wss://hostname:port/dir/dir@ticker');

socket.onopen = function(event) 
{
    console.log('connected');
}


socket.onmessage = function(e){
   var server_message = e.data;
   console.log(server_message);
}

1 个答案:

答案 0 :(得分:6)

在Anaconda中出现错误,请尝试删除certifi:conda remove certifi

如果它不起作用,您可以从此问题获得更多信息:https://github.com/ContinuumIO/anaconda-issues/issues/494#issuecomment-155097614

或者你可以在python脚本中禁用ssl验证:

import ssl
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})