这个坑值得记一笔。用 requests 直接调星火的 HTTP 地址返回 11200,提示授权失败,同一套 AK/SK 在官方示例代码里却能跑通,说明账号本身没问题。

刚开始盯着「系统时间偏差过大导致签名时间戳失效」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。星火走 WebSocket,HTTP 直连拿不到结果;鉴权 URL 的签名串拼接顺序或换行位置不对;代理环境变量生效,WebSocket 流量没有走对出口。

装依赖用官方思路建立长连接

pip install websocket-client

然后按 hmac 规则生成带 signature 的 wss 地址

python -c "import hmac,hashlib,base64;print(base64.b64encode(hmac.new(b'secret',b'host',hashlib.sha256).digest()))"

校验本机时间与标准时间的偏差

w32tm /stripchart /computer:ntp.aliyun.com /samples:1

连接后打印首帧确认业务码

print(json.loads(ws.recv())['header']['code'])

改完先别撤,确认这几项。WebSocket 握手返回 101,能收到 status 为 0 的首帧,后续增量文本正常输出,不再出现 11200。

这里还有个坑。签名串里三行内容的顺序和换行都不能少,多一个空格就会得到 11200,而报错信息不会提示你哪里拼错了,只能逐字符比对。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189