Не могу делать запросы websockets в python3 - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь скопировать следующий код js в python3

var ws = new f("wss://10.20.3.33:11443/ext/remoteinput");
ws.binaryType = 'arraybuffer';
ws.onopen = function() {
    const buffer = new ArrayBuffer(3);
    const uint8 = new Uint8Array(buffer);
    uint8.set([1, 204, 1]);

    ws.send(uint8)
    console.log("Message is sent...");
};

Я пытался использовать: https://github.com/websocket-client/websocket-client https://github.com/crossbario/autobahn-python а что нет ...

Этот висит на websockets.connect

import asyncio, websockets, ssl
ssl_context = ssl.SSLContext()
# ssl_context = ssl.SSLContext(protocol=ssl.CERT_NONE)
ssl_context.verify_mode = ssl.CERT_NONE

async def hello():
    async with websockets.connect(
            'wss://10.20.3.33:11443/ext/remoteinput', ssl=ssl_context) as websocket:
        name = b'\x01\xCC\x01'
        print("2")
        await websocket.send(name)
        print(f"> {name}")

        greeting = await websocket.recv()
        print(f"< {greeting}")

asyncio.get_event_loop().run_until_complete(hello())

То же, что и выше с этим:

import websocket, ssl

ws = websocket.create_connection("wss://10.20.3.33:11443/ext/remoteinput",
sslopt={"cert_reqs": ssl.CERT_NONE})
ws.send(b'\x01\xCC')
ws.close()


import asyncio
from autobahn.asyncio.websocket import WebSocketClientProtocol, \
    WebSocketClientFactory

последний тайм-аут, но ожидание дольше ничего не исправляет

разрыв соединения с одноранговым tcp: 10.20.3.33: 11443 с прерыванием = True: тайм-аут открытия рукопожатия WebSocket (узел не завершил открытие рукопожатия вовремя)

class MyClientProtocol(WebSocketClientProtocol):

    def onConnect(self, response):
        print("Server connected: {0}".format(response.peer))

    def onOpen(self):
        self.sendMessage(b"\x00\x01\x03\x04", isBinary=True)


if __name__ == '__main__':
    factory = WebSocketClientFactory(u"wss://10.20.3.33:11443/ext/remoteinput")
    factory.protocol = MyClientProtocol

    loop = asyncio.get_event_loop()
    coro = loop.create_connection(factory, '10.20.3.33', 11443)
    loop.run_until_complete(coro)
    loop.run_forever()
    loop.close()

Можно ли как-то расширить встроенные сокеты python для использования wss URL? Или, может быть, есть способ заставить один из приведенных выше примеров работать

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.20.3.33', 11443))
msg = s.send(b'\x01\xCC\x01')
s.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...