- 新增 launch.queryHttpDns:类型定义 + HTTPClient.QueryHttpDns + WSSClient.resolveHost(TTL 缓存、多 host 轮询、失败回退默认 host);Host 留空或等于历史默认值即视为自动解析 - WSS 握手 baseinfo 补 tag5=exp 与 tag10 空 customHeaders;UpdateUserExpsReq(cmd23) 改为回传 getConfig 的版本 map(缓存供重连复用) - 新增 launch.pingSignal:HTTP 预热改走 pingSignal,WSS 预热在建连后探测业务通道(失败仅记日志) - UserPrizeInfo 补 tag12 orderId/tag14 图标/tag16 prizeId/tag17 shopItemId/tag19 itemId/tag20 ext/tag21 exchangeDate,前端复盘表加订单号列 - taf 补 WriteListString/ReadListString/ReadMapStringInt64/ReadMapStringStruct - 新增 internal/huya/launch_test.go:用抓包真实报文做字节级夹具(baseinfo 122B、queryHttpDns 请求 93B、记录 308B 等) - CLI -wss-host 默认改为留空;GUI 设置支持留空并给出占位提示;README/WSS_NOTES 同步协议细节
113 lines
3.5 KiB
Markdown
113 lines
3.5 KiB
Markdown
# huya-go
|
||
|
||
虎牙活动积分兑换/抢购的 Go 复刻版。支持两种传输层,CLI 与 GUI 默认都走 `http`:
|
||
|
||
- `http`(默认):走 `https://cdnws.api.huya.com/`,兼容原有命令。
|
||
- `wss`:实验实现。CLI 需要显式指定 `-transport wss`,GUI 在设置里切换;已按浏览器 HAR 改为 TAF `WebSocketCommand` 外层和 WSS 初始化流程,仍建议先用真实 Cookie 小流量验证。
|
||
|
||
## 构建
|
||
|
||
CLI:
|
||
|
||
```bash
|
||
go test ./...
|
||
go build -o huya-go ./cmd/huya-go
|
||
```
|
||
|
||
GUI:
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run typecheck
|
||
cd ..
|
||
wails build -debug -nopackage
|
||
```
|
||
|
||
GUI 二进制输出到 `build/bin/huya-gui`。开发时可以使用 `wails dev` 启动 Wails + React + Ant Design 界面。
|
||
|
||
## Cookie
|
||
|
||
推荐把账号 Cookie 放到本地文件,一行一个账号:
|
||
|
||
```text
|
||
yyuid=...; udb_uid=...; guid=...; ...
|
||
```
|
||
|
||
不要把 Cookie、token、JWT 提交到仓库或写进文档。
|
||
|
||
## 常用命令
|
||
|
||
GUI 界面提供账号预览、奖品列表、积分查询、兑换记录、直接兑换、监控抢购、实时日志。
|
||
|
||
CLI 示例:
|
||
|
||
查询奖品列表:
|
||
|
||
```bash
|
||
./huya-go -cmd list -sid 2203 -cookie-file cookie.txt
|
||
```
|
||
|
||
查询积分:
|
||
|
||
```bash
|
||
./huya-go -cmd score -sid 2203 -cookie-file cookie.txt
|
||
```
|
||
|
||
直接兑换指定 PID:
|
||
|
||
```bash
|
||
./huya-go -cmd exchange -sid 2203 -pid 12889 -cookie-file cookie.txt -transport http
|
||
```
|
||
|
||
按奖品名轮询并抢购:
|
||
|
||
```bash
|
||
./huya-go -cmd monitor -sid 2203 -name 小黄鸭 -cookie-file cookie.txt -transport http -loops 20 -delay 120 -concurrency 5
|
||
```
|
||
|
||
定时开始:
|
||
|
||
```bash
|
||
./huya-go -cmd monitor -sid 2203 -pid 12889 -cookie-file cookie.txt -transport http -at "2026-07-06 20:00:00"
|
||
```
|
||
|
||
## 参数说明
|
||
|
||
- `-cmd`:`list`、`score`、`records`、`exchange`、`monitor`。
|
||
- `-sid`:活动 SID,必填。
|
||
- `-pid`:奖品 PID。`exchange` 必填,`monitor` 可用 `-pid` 或 `-name`。
|
||
- `-max-price`:目标奖品最高积分,`0` 表示不限制(CLI 与 GUI 设置都支持)。
|
||
- `-min-left`:目标奖品最少剩余库存,`0` 表示不限制(CLI 与 GUI 设置都支持)。
|
||
- `-cookie`:单账号 Cookie。
|
||
- `-cookie-file`:多账号 Cookie 文件。
|
||
- `-transport`:`http` 或 `wss`,默认 `http`;WSS 仍为实验通道。
|
||
- `-wss-host`:WebSocket host。默认留空,自动调用 `launch.queryHttpDns` 解析(带 TTL 缓存、多 host 轮询),解析失败时回退内置默认 host;需要固定时可显式指定。
|
||
- `-timeout`:单次调用超时秒数。
|
||
- `-loops`、`-delay`、`-concurrency`:轮询次数、轮询间隔、并发账号数。
|
||
- `-stop-after-success`:`monitor` 中任一账号成功后是否停止。
|
||
- `-v`:输出调试日志。
|
||
|
||
## 已确认的小黄鸭参数
|
||
|
||
2026-07-06 浏览器手动抢购抓包确认:
|
||
|
||
- `sid=2203`
|
||
- `pid=12889`
|
||
- 奖品名:`套装-潮萌小黄鸭`
|
||
- 消耗积分:`988`
|
||
|
||
远端配置里的子奖品代码不能直接当兑换 PID,实际兑换以 `scoreExchangePrize` 请求里的 `pid` 为准。
|
||
|
||
## 精英宝典/幸运币(2026-10-13 抓包)
|
||
|
||
`m-shop.huya.com` 积分中心的兑换记录里确认到:
|
||
|
||
- `sid=2277`
|
||
- `pid=13409`
|
||
- 奖品名:`幸运币礼包(小)`
|
||
- 消耗积分:`20`
|
||
- 订单号格式:`sOrderId_2277_13409_<uid>_<时间戳>_<随机>`
|
||
|
||
该活动的列表/积分/兑换接口与 `sid=2203` 走同一套 `webActUI`,可直接用 `-cmd list -sid 2277` 验证;同一次抓包里「开通精英宝典 / 购买精英币」属于商城付费链路(`shopMiddleUI.*` + 支付宝),本项目未实现,详见 `WSS_NOTES.md`。
|