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日

悬赏问题

  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库