package com.vci.ubcs.starter.util; import org.springframework.http.*; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; /** * http请求工具类 * * @since 2020-03-25 */ public class HttpUtils { //Content-Type的key public static String CONTENT_TYPE = "Content-Type"; //json数据 public static String CONTENT_TYPE_JSON = MediaType.APPLICATION_JSON_VALUE; public static String CONTENT_TYPE_JSON_UTF8 = MediaType.APPLICATION_JSON_UTF8_VALUE; //表单格式,默认 public static String CONTENT_TYPE_TEXT = MediaType.APPLICATION_FORM_URLENCODED_VALUE; /** * get请求 * * @param url * @return */ public static String get(String url) { return get(url, null); } /** * get请求 * * @param url * @param headers 请求头 * @return */ public static String get(String url, MultiValueMap headers) { return request(url, null, headers, HttpMethod.GET); } /** * post请求 * * @param url * @param params 请求参数 * @return */ public static String post(String url, MultiValueMap params) { return post(url, params, null); } /** * post请求 * * @param url * @param params 请求参数 * @param headers 请求头 * @return */ public static String post(String url, MultiValueMap params, MultiValueMap headers) { return request(url, params, headers, HttpMethod.POST); } /** * post请求 TODO: 2024-02-25改,为了满足根据Content-type的类型来发请求,并且param中的json是最后的时候发送请求再转 * * @param url * @param params 请求参数 * @param headers 请求头 * @return */ public static String postByMediaType(String url, MultiValueMap params, MultiValueMap headers,MediaType mediaType) { return request(url, params, headers, HttpMethod.POST,mediaType); } /** * put请求 * * @param url * @param params 请求参数 * @return */ public static String put(String url, MultiValueMap params) { return put(url, params, null); } /** * put请求 * * @param url * @param params 请求参数 * @param headers 请求头 * @return */ public static String put(String url, MultiValueMap params, MultiValueMap headers) { return request(url, params, headers, HttpMethod.PUT); } /** * delete请求 * * @param url * @param params 请求参数 * @return */ public static String delete(String url, MultiValueMap params) { return delete(url, params, null); } /** * delete请求 * * @param url * @param params 请求参数 * @param headers 请求头 * @return */ public static String delete(String url, MultiValueMap params, MultiValueMap headers) { return request(url, params, headers, HttpMethod.DELETE); } /** * 表单请求 * * @param url * @param params 请求参数 * @param headers 请求头 * @param method 请求方式 * @return */ public static String request(String url, MultiValueMap params, MultiValueMap headers, HttpMethod method) { if (params == null) { params = new LinkedMultiValueMap<>(); } return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED); } /** * http请求 * * @param url * @param params 请求参数 * @param headers 请求头 * @param method 请求方式 * @param mediaType 参数类型 * @return */ public static String request(String url, Object params, MultiValueMap headers, HttpMethod method, MediaType mediaType) { if (url == null || url.trim().isEmpty()) { return null; } RestTemplate client = new RestTemplate(); // header HttpHeaders httpHeaders = new HttpHeaders(); if (headers != null) { httpHeaders.addAll(headers); } // 提交方式:表单、json httpHeaders.setContentType(mediaType); HttpEntity httpEntity = new HttpEntity(params, httpHeaders); ResponseEntity response = client.exchange(url, method, httpEntity, String.class); return response.getBody(); } public static MultiValueMap set_params_headers(String key,String value,MultiValueMap map){ if(map==null){ map = new LinkedMultiValueMap<>(); } map.add(key,value); return map; } /** * 获取ip * @param request * @return */ public static String getIpAddressFromRequest(HttpServletRequest request){ String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") >-1) { //0:0:0:0:0:0:0:1是本机在访问 ip = "127.0.0.1"; } return ip; } }