最近做的一个从王者营地荣耀榜里抓取数据的功能,需要修改参数并多次向他们的接口发送请求,刚开始还可以正常获取到,但是等到请求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 ){
}
}