Python 使用两种不同的Websocket API执行不同的行为

Python 使用两种不同的Websocket API执行不同的行为,python,bash,websocket,wscat,Python,Bash,Websocket,Wscat,这个问题是对一个先例问题的重新表述(和简化),社区对此不感兴趣() 多亏了Websockets,我正试图与本地网络上的服务器进行通信,但我真是个笨蛋 目前,我被卡住了,因为当我使用bash中的“wscat”和python中的“websocket”lib做(或试图做)相同的事情时,我没有相同的行为 $wscat-c$serveur\u地址-n 已连接(按CTRL+C退出) >导入websocket、ssl >>>uri='服务器地址' >>>ws=websocket.create_连接(ur

这个问题是对一个先例问题的重新表述(和简化),社区对此不感兴趣()

多亏了Websockets,我正试图与本地网络上的服务器进行通信,但我真是个笨蛋

目前,我被卡住了,因为当我使用bash中的“wscat”和python中的“websocket”lib做(或试图做)相同的事情时,我没有相同的行为

$wscat-c$serveur\u地址-n
已连接(按CTRL+C退出)
<{[…]”标记:“11235326”[…]}
> 
>导入websocket、ssl
>>>uri='服务器地址'
>>>ws=websocket.create_连接(uri,sslopt={“cert_reqs”:ssl.cert_NONE})
>>>ws.recv()
... 无限等待
使用wscat,我会立即收到一个响应,其中包含用于下一次连接的令牌。
但是使用python中的websocket,根本没有响应

这两个Websocket的创作有什么不同吗

编辑:在这两种情况下,服务器地址都是'wss://192.168.1.20:8002/api/v2/channels/samsung.remote.control?name=dGVzdA='


我假设在这两种情况下,提供wss地址都会被自动检测为安全的websocket请求。

好的,在我的例子中,我发现了这两个API之间的区别

在python中,当我执行以下操作时,我成功地与wscat进行了类似的连接:

import asyncio
import websockets
import ssl

async def connect(uri):
    #HIGHLY INSECURE
    ssl_context = ssl.SSLContext()
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    #HIGHLY INSECURE
    async with websockets.connect(uri, ssl=ssl_context) as websocket:
        message = await websocket.recv()
        dprint(message)

uri = ...
asyncio.get_event_loop().run_until_complete(connect(uri))
asyncio只是为了在调用异步连接后不冻结我的应用程序python脚本

我认为最有趣的部分是
ssl\u context.check\u hostname=False

Wscat上的选项-n描述如下:
-n,--no check不检查未经授权的证书


我假设将
sslopt={“cert_reqs”:ssl.cert_NONE}
提供给python websocket实现是等效的,但显然还应该指定它们不想检查主机名。

您是否尝试过特定端口?在这两种情况下,我都在端口8002上发送,它是我服务器上安全websocket的端口。你确定API调用不应该在两种情况下都使用SSL运行吗?我不理解你@RamanSailopal,你能给我举个例子吗?