Не удалось обновить Websocket: 403 Запрещен автобан Asyncio - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь подключиться к веб-сокету с помощью Autobahn / Asyncio.Я подключился к нескольким другим веб-сокетам, используя точно такой же код, но этот конкретный веб-сокет отклоняет мои попытки.Я получаю ошибку при обновлении соединения, и сервер отвечает 403. Я попытался подключиться к этой веб-розетке с помощью пакета «веб-сокеты», и это было успешно, поэтому в реализации Autobahn должен быть какой-то параметр по умолчанию, которыйвызывая проблему.

Я сравнил успешный запрос квитирования от реализации websockets с неудачным запросом квитирования от реализации автобана:

websockets: запрос:

GET /ws/v3 HTTP/1.1
Host: real.okex.com:10442
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: eTj8gJmhJGTj868ObmO2qg==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
User-Agent: Python/3.6 websockets/8.0

ответ:

Server: nginx
Date: Tue, 09 Jul 2019 20:49:33 GMT
Connection: upgrade
upgrade: websocket
sec-websocket-accept: NJxn9G+1AJaYlHY1n1/Iy6P+2R8=

autobahn: request:

GET /ws/v3 HTTP/1.1
User-Agent: AutobahnPython/18.11.1
Host: real.okex.com:10442
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: QI5/tydGJRB6/LMDXkQ1dg==
Sec-WebSocket-Version: 13

response:

WebSocket connection upgrade failed (403 - Forbidden)

Я даже жестко запрограммировал реализацию autobahn для отправки точно такого же запроса GET, что и для 'websockets'реализация, но это не сработало.

Код автобана:

async def connect_to_OKEX():
    while True:
        try:
            global OKEX_transport
            ws_endpoint = 'wss://real.okex.com:10442/ws/v3'
            factory = WebSocketClientFactory(ws_endpoint)
            factory.protocol = OKEX_Protocol
            coro = loop.create_connection(factory, 'www.okex.com', 443, ssl=True)
            print("running {}".format(coro))
            OKEX_transport, proto = await coro
            print("proto {}".format(proto))
            break
        except Exception as e:
            logger.exception('OKEX error connecting')
            await asyncio.sleep(1)

код веб-сокетов:

async def subscribe_without_login('wss://real.okex.com:10442/ws/v3', channels):
    async with websockets.connect(url) as websocket:
.....

Код автобана, который я использую, успешно работал в течение несколькихдругие веб-сокеты, так, возможно, есть какой-то флаг, который мне нужно отметить, который является специфическим для этого веб-сокета?Как я могу понять это?

...