package com.wgcloud.util; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.wgcloud.util.staticvar.StaticKeys; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.stereotype.Component; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; /** * @version V1.0 * @ClassName:RestUtil.java * @author: wgcloud * @date: 2021年1月16日 * @Description: RestUtil.java * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Component public class RestUtil { private Logger logger = LoggerFactory.getLogger(RestUtil.class); @Autowired private RestTemplate restTemplate; /** * post请求接口 * * @param url 接口url * @param postStr 提交参数 * @param keyWord 响应内容需要包含的关键字符 * @param noKeyWord 响应内容不能包含的关键字 * @return */ public Map post(String url, String postStr, String keyWord, String noKeyWord, HashMap headerMap) { Map responseMap = new HashMap<>(); try { //默认超过20s后判定失败 responseMap.put("resTimes", 20000); long startTimes = System.currentTimeMillis(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", "*/*"); headers.set(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); //如果有设置添加header键值对 添加到header begin if (null != headerMap) { headers.setAll(headerMap); } //如果有设置添加header键值对 添加到header end HttpEntity httpEntity = new HttpEntity<>(postStr, headers); ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); long endTimes = System.currentTimeMillis(); String resTimes = (endTimes - startTimes) + ""; //响应时间 responseMap.put("resTimes", Integer.valueOf(resTimes)); //状态码 responseMap.put("heathStatus", responseEntity.getStatusCodeValue()); logger.debug(responseEntity.getBody()); //检查响应需要包含设置关键字符 if (!StringUtils.isEmpty(keyWord)) { if (!responseEntity.getBody().contains(keyWord)) { logger.error(url + "----响应内容没有含标识-------" + keyWord); responseMap.put("heathStatus", 500); } } //检查响应不能包含设置关键字符 if (!StringUtils.isEmpty(noKeyWord)) { String[] noKeyWords = noKeyWord.split(StaticKeys.SPLIT_DH); for (String noKeyWordChar : noKeyWords) { if (responseEntity.getBody().contains(noKeyWordChar)) { logger.error(url + "----响应内容包含(设置不能包含的关键字)标识-------" + noKeyWordChar); responseMap.put("heathStatus", 500); break; } } } return responseMap; } catch (HttpClientErrorException e) { logger.error("服务接口检测任务错误", e); responseMap.put("heathStatus", e.getRawStatusCode()); return responseMap; } catch (Exception e) { logger.error("服务接口检测任务错误", e); responseMap.put("heathStatus", 500); return responseMap; } } public JSONObject post(String url, JSONObject jsonObject) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString()); HttpEntity httpEntity = new HttpEntity<>(JSONUtil.parse(jsonObject).toString(), headers); ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); return JSONUtil.parseObj(responseEntity.getBody()); } public JSONObject post(String url) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString()); HttpEntity httpEntity = new HttpEntity<>("", headers); ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); return JSONUtil.parseObj(responseEntity.getBody()); } /** * get方式请求 * @param url 请求url * @param keyWord 响应内容需要包含字符串 * @param noKeyWord 响应内容不能包含字符串,多个用逗号隔开 * @return */ public Map get(String url, String keyWord, String noKeyWord) { Map responseMap = new HashMap<>(); try { responseMap.put("resTimes", 20000); long startTimes = System.currentTimeMillis(); //v3.3.4去掉时间戳,模拟真实浏览器环境 /*if (url.indexOf("?") > 0) { url = url + "×=" + startTimes; } else { url = url + "?times=" + startTimes; }*/ ResponseEntity responseEntity = null; if (url.startsWith("https")) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); // headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString()); headers.add("Accept", "*/*"); headers.set(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); HttpEntity httpEntity = new HttpEntity<>("", headers); responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class); } else { responseEntity = restTemplate.getForEntity(url, String.class); } long endTimes = System.currentTimeMillis(); String resTimes = (endTimes - startTimes) + ""; responseMap.put("resTimes", Integer.valueOf(resTimes)); responseMap.put("heathStatus", responseEntity.getStatusCodeValue()); logger.debug(responseEntity.getBody()); //检查响应需要包含设置关键字符 if (!StringUtils.isEmpty(keyWord)) { if (!responseEntity.getBody().contains(keyWord)) { logger.error(url + "----响应内容没有包含关键字标识-------" + keyWord); responseMap.put("heathStatus", 500); } } //检查响应不能包含设置关键字符 if (!StringUtils.isEmpty(noKeyWord)) { String[] noKeyWords = noKeyWord.split(StaticKeys.SPLIT_DH); for (String noKeyWordChar : noKeyWords) { if (responseEntity.getBody().contains(noKeyWordChar)) { logger.error(url + "----响应内容包含(设置不能包含的关键字)标识-------" + noKeyWordChar); responseMap.put("heathStatus", 500); break; } } } return responseMap; } catch (HttpClientErrorException e) { logger.error("服务接口检测任务错误", e); responseMap.put("heathStatus", e.getRawStatusCode()); return responseMap; } catch (Exception e) { logger.error("服务接口检测任务错误", e); responseMap.put("heathStatus", 500); return responseMap; } } public String get(String url) { try { ResponseEntity responseEntity = null; if (url.startsWith("https")) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString()); headers.set(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); HttpEntity httpEntity = new HttpEntity<>("", headers); responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class); } else { responseEntity = restTemplate.getForEntity(url, String.class); } return responseEntity.getBody(); } catch (HttpClientErrorException e) { logger.error("请求守护进程信息错误", e); return ""; } catch (Exception e) { logger.error("请求守护进程信息错误", e); return ""; } } }