华为云云实验免费名额接口踩坑:字段是 experiment_id,不是 experimentId

举报
yd_241537561 发表于 2026/10/10 14:20:31 2026/10/10
【摘要】 调华为云沙箱调度接口时报 experimentId 不能为 null,实际字段却是 experiment_id。顺带整理纯 HTTP 跑通一个云实验的完整链路:领名额、开环境、心跳、手动完成、释放实例。

目标是把华为云云实验做成每日可自动跑的任务。按页面请求抄一遍参数,几乎所有沙箱接口都返回 experimentId不能为null。第一反应是字段名写错了,但照着报错文案改成 experimentId 反而更不对——真正生效的是 snake_case 的 experiment_id,报错信息里却拼成了驼峰。用 {"experiment_id": 2325} 一试,返回变成 lab instance not exist or has end,说明参数已被正确解析,这才确认是文案误导。

一、环境起不来的根因是时长为 0

参数改对后调 exercise/start,接口正常返回一个 operationStatisticsId,但轮询 exercise/get-instance-info 永远停在 status: "0",instance_info 一直是 null。日志里没有任何错误,只能从别的接口找线索。

GET  .../hdsandboxuserservice/v1/user/get-user-times?experiment_id=<id>   -> 0
POST .../hdsandboxschedulerservice/v1/exercise/confirm-use-free-slot
     {"experiment_id": <int>}   -> {"result": null}      # 领到了
GET  .../user/get-user-times?experiment_id=<id>   -> 7200

get-user-times 返回 0 才是根因:免费实验要先领当日名额,领完时长变 7200 秒,此时再调 start 才会真正开资源,十几秒后实例就出现。名额每人每天限领一次,重复领会返回 HD.31420017 no free slot。这类「前置状态没满足但接口不报错」的情况,靠轮询目标接口是查不出来的,得把相邻的状态查询接口也调一遍。

二、完整链路只有五个调用

base = "https://data.edu.huaweicloud.cn/rest/developer/user/hdsandboxschedulerservice"
1. POST /v1/exercise/check-operation-status     {"experiment_id": id}
2. POST /v1/exercise/confirm-use-free-slot      {"experiment_id": id}
3. POST /v1/exercise/start                      {"experiment_id": id}
4. POST /v1/exercise/get-instance-info          {"experiment_id": id}   # 轮询到非 null
5. POST /v1/exercise/heartbeat                  {"experiment_id": id}   # 维持会话
6. POST /v1/exercise/manual-done                {"experiment_id": id, "source": "MANUAL_CLICK"}
7. POST /v1/exercise/done  /  /v1/exercise/end  {"experiment_id": id, "done_scene": "manual"}

另外鉴权要单独换一次 JWT:只带浏览器 Cookie 调 data.edu.huaweicloud.cn 会报 token not found,需要先 POST /rest/developer/servlet/hdauthjwt/login,body 为 {"service": "edu.huaweicloud.cn"},取 result.token 放到后续请求的 Auth-Token 头里。这一步和 Cookie 作用域是两回事,漏了任何一个都会得到完全不同的报错。

三、有些实验根本不需要开环境

实验目录接口 warefree/experiment-list 里有个 manual_type 字段:1 是需要沙箱的实操实验,4 是纯手册实验。后者不调度任何云资源,对它调 manual-done 就会直接记录完成,几毛钱的资源都不会开出来。反过来,对沙箱实验调它会返回 not manual type。

所以按成本排序应该先试纯手册实验。行为上报是服务端异步的,官方口径最长 30 分钟,实测大约二十多分钟在任务列表里变成已完成,脚本里不要指望立即回查成功。

小结

这个模块最反直觉的三点:报错文案与真实字段名不一致、开不出环境却不返回错误、手册类实验压根不用开环境。跑之前把 get-user-times、manual_type 这些状态字段先读一遍,比对着页面请求硬抄要省很多时间。用完记得调 done/end 释放实例,别让云资源挂在账号上计费。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。