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
Другие вопросы по тегам