wss客户端请求(python websocket)

import asyncio
import websockets
import json

async def connect_to_wss(uri):
    # 连接到WSS服务器
    async with websockets.connect(uri) as websocket:
        # 执行一些操作,例如发送和接收消息
        data = {"脱敏处理"}
        await websocket.send(json.dumps(data))
        while 1:
            response = await websocket.recv()
            try:
                rjson = json.loads(response)
            except:
                with open('ok.mp3','wb')as f:
                    f.write(response)
                print(response)
            else:
                print(rjson)
                if rjson['event'] == 'TaskFinished':
                    print('tts is ok')
                    break
            print('='*50)
            
            

# WSS服务器地址,包含协议
wss_url = "wss://脱敏处理/internal/api/v2/ws?device_id=脱敏处理&iid=脱敏处理"

# 运行异步事件循环
asyncio.get_event_loop().run_until_complete(connect_to_wss(wss_url))
asyncio.get_event_loop().close()

上面采用的是异步方式 等待可以直接

下方的如果不采用异步方式,使用websocket-client需要不停发送消息的就需要使用线程

例如

import json
import time
import _thread
import websocket


web_socket_url = "wss://appcomm-user.脱敏处理.com/app-commserv-user/websocket?qrToken=%s"
qr_token = "ca6e6cfb70de4f2f915b968aefcad404"
once_password = ""
uuid = ""


def wss_on_message(ws, message):
    print("=============== [message] ===============")
    message = json.loads(message)
    print(message)
    if "扫码成功" in message["msg"]:
        global once_password, uuid
        once_password = message["oncePassword"]
        uuid = message["uuid"]
        ws.close()


def wss_on_error(ws, error):
    print("=============== [error] ===============")
    print(error)
    ws.close()


def wss_on_close(ws, close_status_code, close_msg):
    print("=============== [closed] ===============")
    print(close_status_code)
    print(close_msg)


def wss_on_open(ws):
    def run(*args):
        while True:
            ws.send(qr_token)
            time.sleep(8)
    _thread.start_new_thread(run, (qr_token,))


def wss():
    # websocket.enableTrace(True)  # 是否显示连接详细信息
    ws = websocket.WebSocketApp(
        web_socket_url % qr_token, on_open=wss_on_open,
        on_message=wss_on_message, on_error=wss_on_error,
        on_close=wss_on_close
    )
    ws.run_forever()

在这里需要每间隔8s进行发送请求获取二维码状态 那么这个时候 如果直接主线程会导致阻塞 无法获取服务器响应 所以必须采用线程 那么如果使用异步就不用啦

await asyncio.sleep(8)

如果想要更加简洁明了 还是使用websocket-client吧 方便的话websocket异步

当然 你也可以创建一个属于自己的服务端

import asyncio
import websockets


async def echo(websocket, path):
    async for message in websocket:
        message = "I got your message: {}".format(message)
        await websocket.send(message)


asyncio.get_event_loop().run_until_complete(websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()

抓包调试推荐apipost

注意这个服务端 你需要在发送消息之后使用

await websocket.close()这样才能主动关闭客户端的连接 当然他也只有一次通信

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/747340.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双指针dd d df f

像二分这样的算法,我们甚至可以不用管,直接在问题空间之内搜索,但是双指针也非常好用,帮助我们来减少枚举对象,我们来总结一下这经典的三个题目: 最长上升不重复子序列活动 - AcWings 首先一定要写…

使用单调队列求滑动窗口最大值

单调队列:队列元素之间的关系具有单调性(从队首到队尾单调递增/递减),队首与队尾进行插入与删除操作,使队列保持单调递增/递减,由双端队列deque实现。 通过例题对单调队列进行分析掌握: 使用单…

最小化安装的CentOS7部署KVM虚拟机

正文共:1666 字 21 图,预估阅读时间:2 分钟 目前安装KVM主要有几种方式,第一种就是软件选择安装“带GUI的服务器”,然后选择虚拟化相关的附加环境(KVM部署初体验);第二种就是不安装G…

【移动应用开发期末复习】第五/六章

系列文章 第一章——Android平台概述 第一章例题 第二章——Android开发环境 第二章例题 第三章 第三章例题 第四章 系列文章界面布局设计线性布局表格布局帧布局相对布局约束布局控制视图界面的其他方法代码控制视图界面数据存储与共享首选项信息数据文件SQLite数据库Content…

linux高级编程(进程)(1)

进程: 进程的含义? 进程是一个程序执行的过程,会去分配内存资源,cpu的调度 进程分类: 1、交互式进程 2、批处理进程 shell脚本 3、 守护进程 进程与程序的区别: 1)程序是…

力扣每日一题 特别的排列 DFS 记忆化搜索 位运算 状态压缩DP

Problem: 2741. 特别的排列 👨‍🏫 参考题解 🍻 暴搜 ⏰ 时间复杂度: O ( N ) O(N) O(N) class Solution {public int specialPerm(int[] nums) {boolean[] visited new boolean[nums.length];return dfs(nums, 0, -1, visit…

Stm32的DMA的学习

一,介绍 二,DMA框图 三,DMA通道 四,相关HAL库函数 五,配置DMA 六,Stm32CubeMX配置 【13.1】减少CPU传输负载 DMA直接存储器访问—Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili

机票、火车票,YonSuite让企业支出笔笔可控

在数字化浪潮的推动下,企业的商旅管理正迎来一场深刻变革。传统的手动预订、报销模式已无法满足现代企业对效率和成本控制的双重要求。YonSuite商旅费控,作为一款领先的企业商旅管理平台,正以其独特的优势,帮助企业实现机票、火车…

【Android】多种方式实现截图(屏幕截图、View截图、长图)

目录 一、截图原理二、实现方式1. View截图2. WebView截图3. 屏幕截图 三、格式转换方法 一、截图原理 我们的手机一般同时按下音量-键和电源键就会将当前屏幕显示的内容截取下来,那里面具体经过哪些流程呢? Android中每一个页面都是一个Activity&#…

MySQL进阶_3.MySQL日志

文章目录 第一节、MySQL事务日志1.1、redo日志1.1.1、为什么需要REDO日志1.1.2、REDO日志的好处、特点1.1.3、redo的组成1.1.4、redo的整体流程 1.2、Undo日志1.2.1、如何理解Undo日志1.2.2、Undo日志的作用1.2.3、undo log的生命周期 第一节、MySQL事务日志 事务有4种特性&am…

Mybatis 系列全解(2)——全网免费最细最全,手把手教,学完就可做项目!

Mybatis 系列全解(2) 1. ResultMap结果集映射2. 日志2.1 日志工厂2.2 log4j 3. 分页3.1 实现SQL分页3.2 RowBounds 分页3.3 分页插件 4. 使用注解开发4.1 面向接口编程4.2 使用注解4.3 Mybatis 详细执行过程4.4 CRUD 增删改查 5. Lombok 1. ResultMap结果…

无人门店社区拼团小程序系统源码

​打造便捷购物新体验 🛒 引言:社区购物新趋势 随着科技的飞速发展,无人门店和社区拼团已经成为购物的新趋势。而结合这两者的“无人门店社区拼团微信小程序”更是为我们带来了前所未有的便捷购物体验。无需排队、无需现金交易,只…

营销能力大提升:6步策略助你成为市场精英

作为一名拥有9年经验的营销老兵,道叔有一些心得想要分享给每一位在营销领域奋斗的朋友。 在这个快速变化的行业里,除了掌握营销的专业知识,还有一些技能和视角是我们必须掌握的。 1. 培养业务视角 你有没有注意到,现在企业在投…

[word] 如何在word中插入地图? #学习方法#其他

如何在word中插入地图? 人事部门在给即将入职的新员工发送入职资料时,为了方便新员工能快速找到公司的具体位置,一般都会在word资料中插入公司所在位置的地图。今天,小编就分享一个在word中插入地图的方法。 第一步:…

Linux 扩容 根分区

CentOS7,LVM根分区扩容步骤: LVM扩容思维流程:创建一个物理分区–>将这个物理分区转换为物理卷–>把这个物理卷添加到要扩展的卷组中–>然后才能用extend命令扩展此卷组中的逻辑卷 1.查看现有分区大小 df -TH 2.关机增加大小为40G(测试环境使用的Vmware Workstati…

FPGA开发技能(7)Vivado设置bit文件加密

文章目录 前言1. AES加密原理2.xilinx的AES方案3.加密流程3.1生成加密的bit流3.2将密钥写入eFUSE寄存器 4.验证结论5.传送门 前言 在FPGA的项目发布的时候需要考虑项目工程加密的问题,一方面防止自己的心血被盗,另一方面也保护公司资产,保护知…

使用conda安装第三方包报错CondaSSLError

使用conda安装第三方包报错CondaSSLError 1. 报错信息2. 解决方法 1. 报错信息 错误描述:刚刚下载的 anaconda 在使用 conda 安装 pytorch 时报错(CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is required to download …

Python数据分析第一课:Anaconda的安装使用

Python数据分析第一课:Anaconda的安装使用 1.Anaconda是什么? Anaconda是一个便捷的获取包,并且对包和环境进行管理的虚拟环境工具,Anaconda包括了conda、Python在内的超过180多个包和依赖项 简单来说,Anaconda是包管理器和环境…

1变3裂变营销,七星创客模式,推三返一模式解析

推三返一模式的出现让我们看到,在商业竞争中,创新的商业模式与良好的产品服务相结合,才能真正赢得市场和消费者的心。 推三返一又称为“三三循环”模式,是一种简单粗暴的营销模式,消费者通过直接推荐三个新用户到平台消…

Java后端 || ElementUI 显示后端树形表格数据

文章目录 1、前端源码2、数据库设计3、后端设计3.1、实体类3.2、Controller层3.3、具体树形列表后端代码实现 1、前端源码 ElementUI Table 链接 在此链接中找到 树形数据与懒加载 查看其JS源码,可知,每个菜单节点的子节点存放于children字段中&#x…