如何通过在 Python 中使用 wss 从 blockchain.com 获得响应?

How to get response from blockchain.com by using wss in Python?

我尝试连接到 blockchain.com websocket by using this API. I use websockets library for Python。当我使用交互式客户端方法连接时,我成功了。但是当我尝试使用我的 Python 脚本进行连接时,服务器套接字没有任何响应。这是我的脚本:

import asyncio
import websockets


async def main():
    async with websockets.connect("wss://ws.blockchain.info/inv") as client:
        print(await client.recv())


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

这是我在使用交互式客户端时在终端中看到的内容,我希望在 运行 我的脚本时看到它:

Connected to wss://ws.blockchain.info/inv.
>

正如@SteffenUllrich 在评论中提到的,此文本由 interactive client 显示 - 它不是从服务器收到的消息 - 您必须使用自己的 print("Connected to wss://ws.blockchain.info/inv.") 来显示它。

如果你想从服务器 recv() 获取一些东西,那么首先你必须 send() 命令到服务器。

import asyncio
import websockets

async def main():
    async with websockets.connect("wss://ws.blockchain.info/inv") as client:
        print("[main] Connected to wss://ws.blockchain.info/inv" )

        cmd = '{"op":"ping"}'
        print('[main] Send:', cmd)
        await client.send(cmd)
        print('[main] Recv:', await client.recv())

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

结果:

[main] Connected to wss://ws.blockchain.info/inv
[main] Send: {"op":"ping"}
[main] Recv: {"op":"pong"}