Van様 2022-03-04 15:53 采纳率: 33.3%
浏览 59
已结题

抓取接口返回信息为空的问题

最近做的一个从王者营地荣耀榜里抓取数据的功能,需要修改参数并多次向他们的接口发送请求,刚开始还可以正常获取到,但是等到请求100多次之后,就获取不到信息了,这个时候停掉请求,等过一会不做任何修改就又能获取到了,这个是怎么回事呢,我想不间断的一直发请求,直到循环结束,以快速拿到数据。有没有仁兄指点一波,下面是主要代码

public void testPost(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
        //开始时间
        long start = System.currentTimeMillis();
        List<Hero> listsHero = heroMapper.selectHeroAll();
        List<Area> listsArea = areaMapper.selectAreaAll();

        //三层循环第一层是大区,第二层是英雄,第三层是地区
        for (Constant.Server server:Constant.Server.values() ) {
            for (Hero hero:listsHero ) {
                for (Area area:listsArea ) {
                    doKingInfoGet(hero,area,server);
                }
            }

        }
        //结束时间
        long end = System.currentTimeMillis();
        String timeDiff = Tool.timeDiff(start,end);
        System.out.println("最终耗时:" + timeDiff);
    }

    private void doKingInfoGet(Hero hero, Area area, Constant.Server server) throws IOException {
        String url = Constant.KING_URL;//王者战力接口

        URL realUrl = new URL(url);
        // 打开和URL之间的连接
        HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

        //设置消息头
        setConnParam(conn);
        //获取参数模板
        String param = Tool.getResourceString(Constant.JSON_RES_PATH);

        //模板转map准备替换参数
        HashMap map = Tool.jsonString2Map(param);;

        //替换参数
        map.replace(Constant.Parameter.heroId,hero.getHeroId());
        map.replace(Constant.Parameter.adcode,area.getAreaId());
        map.replace(Constant.Parameter.areaId,server.getValue());
        //换参结束后转为String直接做参数发送请求
        param = Tool.map2JsonString(map);

        //获取返回体
        String result = getReturnBody(conn,param);
        if(result == null || "".equals(result.trim())){
            System.out.println(area.getAreaId()+Constant.SPACE+area.getAreaName()+"未获取到战力信息!");
            return;
        }
        map = Tool.jsonString2Map(result);
        //如果returnCode等于0,则请求成功
        if((Integer) map.get(Constant.Parameter.returnCode) == 0 ){

        }

    }

  • 写回答

5条回答 默认 最新

  • CSDN专家-sinJack 2022-03-04 16:03
    关注

    访问有限制。限制同一个ip一定时间内访问次数。
    加线程睡眠,间隔执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来