这个坑值得记一笔。用 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,而报错信息不会提示你哪里拼错了,只能逐字符比对。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。