Dota 2 Steam Web API 出现 32 位错误

1 32-bit 32bit-64bit steam-web-api steam

这涉及以下请求:

https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001/?key=<MY KEY>&account_id=<MY ID>
Run Code Online (Sandbox Code Playgroud)

我收到的回复如下所示:

 ...

"players":[
    {
        "account_id": 4294967295
        ...
    },
    {
        "account_id": 4294967295
        ...
    }

 ...
Run Code Online (Sandbox Code Playgroud)

account_id应该返回用户的 32 位帐户 ID(文档此处)。其中少数包含有效 ID,但大部分都说4294967295。由于4294967295出现了这么多,我认为这是一个错误的结果,所以我用谷歌搜索并从维基百科找到了这个:

数字 4,294,967,295 相当于十六进制值 FFFF、FFFF16,是 32 位无符号整数在计算中的最大值。

这是否意味着这是 Steam 方面的错误?这个API是否有漏洞并且无法使用?我有什么办法可以解决这个问题吗?

Na-*_*Hae 6

我知道现在回答这个问题已经太晚了,但如果有人仍然想知道并想知道为什么Steam DOTA 2 API4294967295许多IDs.

Steam DOTA 2 API没有任何问题,也没有被窃听。如果你在很多人身上看到这种情况,IDs那是完全正常的。

其背后的原因是因为您在 Steam 中的帐户 ID32 位 Unsigned INT。 如果您使用 DOTA 2 API 来获取玩家的比赛历史记录,他/她必须从 Dota 2 客户端启用EXPOSE MATCH DATA TO PUBLIC选项(在游戏中的设置选项内)。默认情况下它是禁用的。

因此,如果用户尚未启用该选项,并且您尝试访问该用户的匹配数据,API 将返回“否定”状态。由于 Steam ID 是 32 位,它将返回MAXINT (2^32-1 或 4294967295)。因此,在许多情况下,当用户未公开暴露数据时,您会得到相同的号码 ID。

解决方案是用户公开数据,或者每当您看到 ID 没有存储在数据库中(考虑为真实帐户)时,为其指定一个名称,例如“匿名”或根据您的选择。