You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何给Python SocketIO客户端添加Bearer授权认证

Python SocketIO客户端实现Bearer认证

我开发的软件采用SocketIO通信方式,后端新增了访问令牌用于控制事件访问权限,需要在Python SocketIO客户端中实现Bearer认证。查阅SocketIO文档后未找到Bearer令牌的具体实现方法,请问该如何操作?

实现方案

Python SocketIO客户端支持在连接时自定义请求头,Bearer认证可通过在连接时传入headers参数携带Authorization令牌。以下是修改后的完整代码:

import socketio
import json
import requests
import uuid

# 令牌格式:"Bearer 你的实际令牌内容",不要加括号
accessToken = "Bearer your_actual_token_here"
value = ""

qrid = uuid.uuid4()
client_uuid = uuid.uuid4()  # 避免与导入的uuid模块重名

url = 'your_api_url_here'

myobj = {
  "qrid": str(qrid),
  "uuid": str(client_uuid)
}

sio = socketio.Client()

@sio.on('connect', namespace='/mynamespace')
def connect():
    print("已连接")
    create = requests.post(url, json=myobj)
    print(create.text)
    sio.emit("joinClient", str(client_uuid), namespace='/mynamespace')

@sio.on('disconnect', namespace='/mynamespace')
def disconnect():
    print('已断开连接')

@sio.on("room", namespace='/mynamespace')
def handle_room_event(data):
    print('收到数据:', data)
    eventType = data.get("eventType")
    
    if eventType == "openevent":
        value = data.get("value")
        print("开门" if value else "不开门")
    else:
        print(f"未知事件类型: {eventType}")

# --- 主程序 ---
print('启动客户端')
# 连接时携带Bearer认证头
sio.connect(
    'wss://your_socketio_url_here',
    namespaces=['/mynamespace'],
    headers={'Authorization': accessToken}
)
sio.wait()  # 保持客户端运行,持续监听事件

关键修改说明

  • 携带Bearer令牌:在sio.connect()中通过headers参数传入{'Authorization': accessToken},后端可通过请求头获取令牌完成权限验证。
  • 修复变量冲突:原代码中uuid变量名与导入的模块重名,改为client_uuid避免报错。
  • 简化数据解析:收到的data已是Python字典,无需重复执行json.loads(json.dumps(data)),直接通过键名访问即可。
  • 保持客户端运行:添加sio.wait()方法,防止程序连接后立即退出,确保能持续监听后端事件。
  • 规范令牌格式:accessToken需严格遵循"Bearer 实际令牌内容"格式,不要包含多余括号。

内容的提问来源于stack exchange,提问作者techgtec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:24:12