纯标准库实现华为云成长中心抢券脚本:CSRF 与登录态续期实践

举报
yd_229007688 发表于 2026/10/22 16:00:36 2026/10/22
【摘要】 华为云成长中心的积分可以兑换代金券,但 100 元、200 元档位的券每天放量很少,手点基本抢不到。我用 Python 标准库写了一个轮询脚本,跑在服务器上,这里记录几个关键点。 ## 一、接口结构 成长中心的接口都

华为云成长中心的积分可以兑换代金券,但 100 元、200 元档位的券每天放量很少,手点基本抢不到。我用 Python 标准库写了一个轮询脚本,跑在服务器上,这里记录几个关键点。

一、接口结构

成长中心的接口都在同一个前缀下:

https://devdata.huaweicloud.com/rest/developer/fwdu/rest/developer/user/hdcommunitysoservice/v1/growth

奖品列表用 POST /prize,兑换用 POST /prize-exchange,请求体只需要三个字段:

{"prize_id": "...", "version": 6, "prize_count": 1}

version 是奖品配置的版本号,必须用列表接口返回的最新值,否则会报版本冲突。

二、CSRF 不是从 Cookie 里拿

一开始我以为 csrf-eco 这个 Cookie 就能直接用,结果请求一直返回 403 CSRF unequal。正确做法是先请求:

GET https://devdata.huaweicloud.com/api/get-ainfo

从响应头里读 csrf 字段,再放到后续请求的 csrf 请求头里。这个 token 有时效,我设了 5 分钟主动刷新。

三、登录态会自动过期

Cookie 里最关键的几个是 SessionID、cbc-sid、vk。它们会在几小时后失效,表现为接口返回 not login。

处理方式是静默续期:带着现有 Cookie 请求

https://auth.huaweicloud.com/authui/login?service=<回跳地址>

如果 Cookie 还有效,服务端会直接 302 回业务域名并下发新的会话 Cookie,不需要重新输密码。我把这一步做成启动时执行一次、之后每 6 小时一次、以及遇到 401/403 时立即触发。

四、Cookie 文件要原子写

多进程同时读写 Cookie 文件很容易读到半截 JSON。我的做法是写临时文件、os.replace() 原子替换、chmod 600:

tmp = COOKIE_FILE.with_suffix(".tmp")
tmp.write_text(json.dumps(cookies))
os.chmod(tmp, 0o600)
os.replace(tmp, COOKIE_FILE)

五、轮询间隔要带抖动

固定 30 秒轮询在放券瞬间容易和其他脚本撞在一起。我改成 20~40 秒随机,既降低被风控的概率,也避免同一秒的请求高峰。

六、兑换结果要区分

接口成功时返回 {"error_msg": "SUCCESS"};没库存是 HD.67510029;当天已兑过是 HD.67510034。这三种要分开处理,否则脚本会一直重试已经成功的奖品。

整个脚本不依赖任何第三方库,urllib.request 加 json 就够了,丢到任何一台有 Python 3 的机器上都能跑。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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