websockets "схема https недействительна", но я на самом деле пытаюсь использовать https
Я использую: https://pypi.python.org/pypi/websocket-client
Попытка подключить клиента веб-сокетов Python 2.7 к URL, который на самом деле использует https, а не ws или wss, но я получаю следующую ошибку. В любом случае, я могу обойти это? Обратите внимание, что я не создавал этот сервер веб-сокетов, поэтому не могу контролировать его соответствие стандартам ws или wss.
Ошибка:
схема https недействительна
закрыто
Код Python ниже:
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("Hello %d" % i)
time.sleep(1)
ws.close()
print("thread terminating...")
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("https://MYURL",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
Я знаю, что могу подключиться к этому URL-адресу веб-сокета, потому что работает следующий код JavaScript.
Код Javascript ниже:
const io = require('socket.io-client');
var socket = io.connect('https://MYURL', { transports: ['websocket'] });
socket.on('connect', () => {
console.log('socket connected');
getMarket();
});
socket.on('disconnect', () => {
console.log('socket disconnected');
});
getMarket = () => {
socket.emit('getMarket', {});
socket.once('market', (market) => {
console.log("stuff", market)
});
}
Я попытался изменить исходный код для websocket-клиента. Перешли на код клиента websocket по адресу /Python/2.7/site-packages/websocket/_url.py и изменили следующий код:
is_secure = False
if scheme == "ws":
if not port:
port = 80
elif scheme == "wss":
is_secure = True
if not port:
port = 443
else:
pass
#raise ValueError("!scheme %s is invalid" % scheme)
Но теперь, когда я запускаю его, я получаю еще одну ошибку
[Errno 49] Невозможно назначить запрошенный адрес
закрыто
0 ответов
Я также попал в ту же ситуацию и отправил вопрос здесь
Не получив ответа, я попытался выполнить ваш шаг, отредактировав _url.py, и у меня это сработало. Вот моя попытка отредактировать _url.py:
def parse_url(url):
"""
parse url and the result is tuple of
(hostname, port, resource path and the flag of secure mode)
url: url string.
"""
if ":" not in url:
raise ValueError("url is invalid")
scheme, url = url.split(":", 1)
parsed = urlparse(url, scheme="ws")
if parsed.hostname:
hostname = parsed.hostname
else:
raise ValueError("hostname is invalid")
port = 0
if parsed.port:
port = parsed.port
is_secure = False
if scheme == "ws":
if not port:
port = 80
elif scheme == "wss":
is_secure = True
if not port:
port = 443
else:
if scheme == "https":
is_secure = True
if not port:
port = 443
else:
raise ValueError("scheme %s is invalid" % scheme)
if parsed.path:
resource = parsed.path
else:
resource = "/"
if parsed.query:
resource += "?" + parsed.query
return hostname, port, resource, is_secure