weixin_39788382
weixin_39788382
2020-12-06 02:10

无法接收消息 (请求失败,Api返回码[15])

运行环境:


系统: Windows 10 Pro 14986 Insider Preview [Build 14986.rs_prerelease.161202-1928]
IDE: IntelliJ IDEA Community Edition 2016.3.2
JRE: 1.8.0_111-b14
JDK: 8u112

提出issue前(2016.12.31)clone的repo,有人发送消息时触发异常,master分支与java8分支均存在问题。 更换登录账号或更换网络环境后暂时恢复正常,一段时间(5分钟-1小时不等)后问题复现。问题出现后,立即进入 w.qq.com ,发现无法接收消息,但可以正常发送。 但仅长时间(我测试了10小时左右)登录 WebQQ(不使用机器人),则不会出现该问题,总能正常收发消息。 个人猜测与请求次数过多有关。(我的主号加了近100个群= =,登录5分钟左右后就会出问题)

控制台输出:(java8分支)


net.dongliu.requests.exception.RequestsException: 请求失败,Api返回码[15]
    at 包名.client.SmartQQClient.getResponseJson(SmartQQClient.java:639)
    at 包名.client.SmartQQClient.getJsonObjectResult(SmartQQClient.java:606)
    at 包名.client.SmartQQClient.getGroupInfo(SmartQQClient.java:482)
    at 包名.主类名.getGroupName(主类名.java:139)
    at 包名.主类名.access$200(主类名.java:16)
    at 包名.主类名$1.onGroupMessage(主类名.java:39)
    at 包名.主类名.SmartQQClient.pollMessage(SmartQQClient.java:207)
    at 包名.主类名.SmartQQClient.access$100(SmartQQClient.java:25)
    at 包名.主类名.SmartQQClient$1.run(SmartQQClient.java:72)
    at java.lang.Thread.run(Thread.java:745)

该提问来源于开源项目:ScienJus/smartqq

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • weixin_39917718 weixin_39917718 4月前

    这里有可能跟轮训的次数有关,但是不太确定,我记得 java8 分支的轮训时间改为了 2 分钟,也会出现问题么?理论上和 w.qq.com 的时间是一样的啊

    点赞 评论 复制链接分享
  • weixin_39961855 weixin_39961855 4月前

    问题已经发现了,经测试是我给,在加入的群过多时会导致大量请求 (///) 所以说不是这个项目的问题

    点赞 评论 复制链接分享
  • weixin_39788382 weixin_39788382 4月前

    (我刚想说……)

    是的,问题出在我的“主类名.java” (sorry...) 我在里面使用了如下代码:

    
        private static String getNick(GroupMessage msg)
        {
            for (Group group : client.getGroupList())
            {
                if (msg.getGroupId() == group.getId())
                {
                    for (GroupUser user : client.getGroupInfo(group.getCode()).getUsers())
                    {
                        if (user.getUin() == msg.getUserId())
                        {
                            //......
                        }
                    }
                }
            }
            return "昵称获取错误";
        }
    

    每次收到消息,都会调用client.getGroupListclient.getGroupInfo,造成了大量请求,服务器自我保护而关闭连接。 我试着自己优化下调用逻辑吧。 感谢跟进,以及致歉。

    点赞 评论 复制链接分享
  • weixin_39917718 weixin_39917718 4月前

    好的,Web QQ 服务器确实对调用次数比较敏感,我最开始的做法是在一开始就加载好所有的群成员和好友信息并缓存在内存里,然后收到消息时直接去拿就可以了,即便如此调用时也需要偶尔 Sleep 一下控制请求频率,就像是:

    https://gist.github.com/ScienJus/f1ba1e5b1611cca662cc

    点赞 评论 复制链接分享