当您的请求返回 CHALLENGE_LOCK_OCCUPIED 报错时,意味着该 part(会话分区) 正在处理一个活跃的验证任务,当前处于锁定状态。
错误说明
- 错误码:
CHALLENGE_LOCK_OCCUPIED - 提示信息:
The current part is being challenged, please wait for the lock to be released. - 核心成因:穿云 API 的每一个
part都是一个独立的会话空间。为了确保 Cloudflare 验证状态的稳定性,同一个part在同一时间只能处理一个验证流。
常见触发场景
- 多线程冲突:在本地脚本中使用了多线程或异步并发,但多个线程共用了同一个
part编号。 - 账号共享:多个开发者或多个程序模块同时操作同一个账号,且未对
part进行逻辑隔离。 - 残留占用:上一个请求在处理验证(如 Turnstile)时被强制中断或发生超时,系统锁尚未完全释放。
解决方案
根据 V2 接口 的并发逻辑,建议按以下方式优化您的代码:
- 更换会话分区(推荐):
- 穿云 API 支持 0 ~ 999 共一千个独立分区。
- 优化逻辑:为每个并发线程分配一个唯一的
part值(例如:part = thread_id % 1000),即可彻底避免冲突。
- 增加重试机制:
- 如果必须使用固定
part,请在捕获该错误后增加 3~5 秒 的随机等待时间(Backoff),然后重新发起请求。
- 检查请求频率:
- 确保您的代码逻辑中没有针对同一个
part发起短时间内的超高频重复请求。
自动化调试建议
若不确定如何分配 part,您可以登录 穿云 API 代码生成器,在配置项中选择不同的“会话分区”并生成代码参考。通过观察生成的 JSON 结构中 part 字段的用法,可以更直观地理解分区隔离逻辑。