Closed iCpdXD closed 5 months ago
DS2有效期只有10秒
DS2有效期只有10秒
我只会java所以是用java写的,我生成好的DS2是立马使用的 但回复依旧是 { "data": null, "message": "invalid request", "retcode": -10001 } 这是另外一个生成ds2的代码,使用起来也是-10001 ==
首先,你的role_id
怎么只有8位
其次,hoyolab的salt与国服是不一样的
首先,你的
role_id
怎么只有8位其次,hoyolab的salt与国服是不一样的
抱歉,我role_id一直用的是hoyolab中的通行证id,最近我这边登录游戏一直是“请求频繁”就没上号确认(失忆了)=。= 那hoyolab的salt是什么?(刚刚找了找,我没找到...
首先,你的
role_id
怎么只有8位其次,hoyolab的salt与国服是不一样的
抱歉,我role_id一直用的是hoyolab中的通行证id,最近我这边登录游戏一直是“请求频繁”就没上号确认(失忆了)=。= 那hoyolab的salt是什么?(刚刚找了找,我没找到...
HoYoLab版本:2.54.0 K2:599uqkwc0dlqu3h6epzjzfhgyyrd44ae LK2:rk4xg2hakoi26nljpr099fv9fck1ah10
首先,你的
role_id
怎么只有8位 其次,hoyolab的salt与国服是不一样的抱歉,我role_id一直用的是hoyolab中的通行证id,最近我这边登录游戏一直是“请求频繁”就没上号确认(失忆了)=。= 那hoyolab的salt是什么?(刚刚找了找,我没找到...
HoYoLab版本:2.54.0 K2:599uqkwc0dlqu3h6epzjzfhgyyrd44ae LK2:rk4xg2hakoi26nljpr099fv9fck1ah10
老哥,抱歉啊周末去外地玩了才看到 我换了一下,结果现在返回的是 { "error": 403, "message": "Our services are not available in your country or region." } 这错误怎么越来越离谱==
首先,你的
role_id
怎么只有8位 其次,hoyolab的salt与国服是不一样的抱歉,我role_id一直用的是hoyolab中的通行证id,最近我这边登录游戏一直是“请求频繁”就没上号确认(失忆了)=。= 那hoyolab的salt是什么?(刚刚找了找,我没找到...
HoYoLab版本:2.54.0 K2:599uqkwc0dlqu3h6epzjzfhgyyrd44ae LK2:rk4xg2hakoi26nljpr099fv9fck1ah10
老哥,抱歉啊周末去外地玩了才看到 我换了一下,结果现在返回的是 { "error": 403, "message": "Our services are not available in your country or region." } 这错误怎么越来越离谱==
上代理,hoyolab禁大陆的
上代理,hoyolab禁大陆的
坏了,现在不是上不上代理的问题了(昨天用全局的代理也不行),我现在除了更新的Cookie,改了其他没改,但返回又是-10001
我看国际服要验证的请求头只有 x-rpc-client_type
、 4Xsalt
、 DS2
、Cookie(LToken)这四个
在调用的时候我是不是也不用在意这么多,只保证验证的四个没错就行?
还有就是,我现在都还不清除是我调用的有问题还是生成的是ds2有问题==
有没有哪位老哥代码or软件调通过的,给我看看demo或教教我QAQ
谁跟你说有4X这个头的
另外 -10001 100%是生成的DS不正确 参数问题会返回 -101
上代理,hoyolab禁大陆的
坏了,现在不是上不上代理的问题了(昨天用全局的代理也不行),我现在除了更新的Cookie,改了其他没改,但返回又是-10001 我看国际服要验证的请求头只有
x-rpc-client_type
、 4Xsalt
、DS2
、Cookie(LToken)这四个 在调用的时候我是不是也不用在意这么多,只保证验证的四个没错就行? 还有就是,我现在都还不清除是我调用的有问题还是生成的是ds2有问题== 有没有哪位老哥代码or软件调通过的,给我看看demo或教教我QAQ
字段就是DS,不是DS2
文档上所说的验证请求头部分,X4 salt
代表的是生成DS所需的salt为X4,并不是让你在header内设置一个X4字段;DS2
代表的是所需的DS为DSGen2,同理还有DSGen1,不同版本的DS有不同的生成规则,不论是DSGen1还是DSGen2,在header内的字段名总是DS
以下是一个请求头模板,只列出了部分出现频率高的字段,实际上会包含更多的字段
x-rpc-client_type: 5
DS: 生成的DS
Cookie: 账号的cookie
rk4xg2hakoi26nljpr099fv9fck1ah10
上代理,hoyolab禁大陆的
坏了,现在不是上不上代理的问题了(昨天用全局的代理也不行),我现在除了更新的Cookie,改了其他没改,但返回又是-10001 我看国际服要验证的请求头只有
x-rpc-client_type
、 4Xsalt
、DS2
、Cookie(LToken)这四个 在调用的时候我是不是也不用在意这么多,只保证验证的四个没错就行? 还有就是,我现在都还不清除是我调用的有问题还是生成的是ds2有问题== 有没有哪位老哥代码or软件调通过的,给我看看demo或教教我QAQ字段就是DS,不是DS2
private static String getRole() throws IOException {
String lToken = getLToken();
HttpHost proxy = new HttpHost("127.0.0.1", 7890, "http");
CloseableHttpClient httpClient = HttpClients.custom()
.setRoutePlanner(new DefaultProxyRoutePlanner(proxy))
.build();
String baseUrl = "https://bbs-api-os.hoyolab.com/game_record/genshin/api/index";
String role_id = "717663716";
String server = "os_euro";
String urlWithParams = baseUrl + "?server=" + server + "&role_id=" + role_id;
HttpGet roleHttpGet = new HttpGet(urlWithParams);
roleHttpGet.setHeader("X-Rpc-Client_type", "5");
roleHttpGet.setHeader("Ds", "1716280271,k3AkSj,2f9cbdd8e53b7ec395263b65f9433527");
roleHttpGet.setHeader("Cookie", lToken);
HttpResponse responseRole = httpClient.execute(roleHttpGet);
String role = EntityUtils.toString(responseRole.getEntity());
System.out.println(role);
httpClient.close();
return role;
}
按道理来讲,带上代理访问应该就是这一段代码,但结果还是-10001 我担心是我ds生成的问题,我直接是刷新的hoyolab从请求头拿到的ds
文档上所说的验证请求头部分,
X4 salt
代表的是生成DS所需的salt为X4,并不是让你在header内设置一个X4字段;DS2
代表的是所需的DS为DSGen2,同理还有DSGen1,不同版本的DS有不同的生成规则,不论是DSGen1还是DSGen2,在header内的字段名总是DS
以下是一个请求头模板,只列出了部分出现频率高的字段,实际上会包含更多的字段
x-rpc-client_type: 5 DS: 生成的DS Cookie: 账号的cookie
这个要验证的”cookie“不就应该就是通过Login Ticket获取SToken(V1)和LToken(V1)这个地方获取的ltoken嘛?这个我拿到了
DS只能自己生成,拿别的请求的没用,歇歇吧
另外HoYoLAB与米游社的SALT不能混用
另外HoYoLAB与米游社的SALT不能混用 HoYoLAB的SALT是啥啊?我翻了很多,都是讨论米游社的没找到HoYoLAB的 这没有SALT,我也生成不了DS啊 =。=
这没有SALT,我也生成不了DS啊 =。=
为什么不先用米游社的请求呢?只是测试ds算法的话两者是通用的
这没有SALT,我也生成不了DS啊 =。=
为什么不先用米游社的请求呢?只是测试ds算法的话两者是通用的
- 我是想搞个能获取国际服数据,所以一直在尝试用HoYoLAB
- 我用米游社的也测试过,也是同样的-10001 目的是想获取国际服数据,所以问的问题也都是和国际服相关的(但米游社是同时在尝试)
public class Demo {
public static void main(String[] args){
// 要使用的salt,此为4X salt
String salt = "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs";
// 发送GET请求时的query参数
String query = "server=cn_gf01&role_id=101723216";
// 1. 获取当前的Unix时间戳(秒)
long t = Instant.now().getEpochSecond();
// 2. 生成100000到200000之间的随机整数
Random random = new Random();
int r = random.nextInt(100001) + 100000;
if (r == 100000) {
r = 642367;// 确保 r 不等于 100000
}
//3.获取query参数,并按照字母升序排列
String[] queryParams = query.split("&");
Arrays.sort(queryParams);
query = String.join("&", queryParams);
// 4. 组装格式化字符串
String main = String.format("salt=%s&t=%d&r=%d&b=&q=%s", salt, t, r, query);
// 5. 进行MD5编码
String ds = md5(main);
// 6. 最终结果
String finalResult = String.format("%d,%d,%s", t, r, ds);
System.out.println(finalResult);
}
public static String md5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8));
// 将byte数组转为16进制字符串
StringBuilder hexString = new StringBuilder();
for (byte b : messageDigest) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
这是java写的,改了一下也都有加注释,能帮我看看问题在哪嘛?(那我就先解决ds的问题再说问HoYoLAB的SALT)
getMultiTokenByLoginTicket 甚至根本不需要DS 和Cookie,只需要正确的query参数。 除非你在请求别的接口,否则我也不清楚为什么会有 -10001
game_record/genshin/api/index 需要正确的referer
另外你随便点开一个在这里评论的人,他的主页要是没有项目我原地赤石
国际服获取LToken我推测出是 https://api-account-os.hoyoverse.com/account/auth/api/getMultiTokenByLoginTicket ,但我没搞明白通过LToken获取绑定游戏账号的基本信息该用什么,有人能帮帮我嘛?顺带一提,有能获取角色武器信息的api嘛?