package com.zcloud.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.zcloud.entity.PageData; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.*; /** * HttpClient发送GET、POST请求 * @Author libin * @CreateDate 2018.5.28 16:56 */ public class HttpClientService { private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class); /** * 返回成功状态码 */ private static final int SUCCESS_CODE = 200; /** * 发送GET请求 * @param url 请求url * @param nameValuePairList 请求参数 * @return JSON或者字符串 * @throws Exception */ public static Object sendGet(String url, List nameValuePairList) throws Exception{ JSONObject jsonObject = null; CloseableHttpClient client = null; CloseableHttpResponse response = null; try{ /** * 创建HttpClient对象 */ client = HttpClients.createDefault(); /** * 创建URIBuilder */ URIBuilder uriBuilder = new URIBuilder(url); /** * 设置参数 */ uriBuilder.addParameters(nameValuePairList); /** * 创建HttpGet */ HttpGet httpGet = new HttpGet(uriBuilder.build()); /** * 设置请求头部编码 */ httpGet.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")); /** * 设置返回编码 */ httpGet.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8")); /** * 请求服务 */ response = client.execute(httpGet); /** * 获取响应吗 */ int statusCode = response.getStatusLine().getStatusCode(); if (SUCCESS_CODE == statusCode){ /** * 获取返回对象 */ HttpEntity entity = response.getEntity(); /** * 通过EntityUitls获取返回内容 */ String result = EntityUtils.toString(entity,"UTF-8"); /** * 转换成json,根据合法性返回json或者字符串 */ try{ jsonObject = JSONObject.parseObject(result); return jsonObject; }catch (Exception e){ return result; } }else{ LOGGER.error("HttpClientService-line: {}, errorMsg{}", 97, "GET请求失败!"); } }catch (Exception e){ LOGGER.error("HttpClientService-line: {}, Exception: {}", 100, e); } finally { response.close(); client.close(); } return null; } /** * 发送POST请求 * @param url * @param nameValuePairList * @return JSON或者字符串 * @throws Exception */ public static Object sendPost(String url, List nameValuePairList) throws Exception{ JSONObject jsonObject = null; HttpClient client = new SSLClient(); HttpResponse response = null; try{ /** * 创建一个httpclient对象 */ client = HttpClients.createDefault(); /** * 创建一个post对象 */ HttpPost post = new HttpPost(url); /** * 包装成一个Entity对象 */ StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8"); /** * 设置请求的内容 */ post.setEntity(entity); /** * 设置请求的报文头部的编码 */ post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded;")); /** * 设置请求的报文头部的编码 */ post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8")); /** * 执行post请求 */ response = client.execute(post); /** * 获取响应码 */ int statusCode = response.getStatusLine().getStatusCode(); if (SUCCESS_CODE == statusCode){ /** * 通过EntityUitls获取返回内容 */ String result = EntityUtils.toString(response.getEntity(),"UTF-8"); /** * 转换成json,根据合法性返回json或者字符串 */ try{ jsonObject = JSONObject.parseObject(result); return jsonObject; }catch (Exception e){ return result; } }else{ LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 146, "POST请求失败!"); } }catch (Exception e){ LOGGER.error("HttpClientService-line: {}, Exception:{}", 149, e); }finally { /* response.close(); client.close();*/ } return null; } /** * 发送POST请求 * @param url * @param headerMap * @param bodyMap * @return JSON或者字符串 * @throws Exception */ public static Object sendPostJson(String url, Map headerMap, Map bodyMap) throws Exception{ JSONObject jsonObject = null; HttpClient client = new SSLClient(); HttpResponse response = null; try{ /** * 创建一个httpclient对象 */ client = HttpClients.createDefault(); /** * 创建一个post对象 */ HttpPost post = new HttpPost(url); for (Map.Entry entry : headerMap.entrySet()) { post.setHeader(entry.getKey(), entry.getValue().toString()); } /** * 包装成一个Entity对象 */ StringEntity entity = new StringEntity(JSONObject.toJSONString(bodyMap), ContentType.create("application/json", "utf-8")); /** * 设置请求的内容 */ post.setEntity(entity); /** * 执行post请求 */ response = client.execute(post); /** * 获取响应码 */ int statusCode = response.getStatusLine().getStatusCode(); if (SUCCESS_CODE == statusCode){ /** * 通过EntityUitls获取返回内容 */ String result = EntityUtils.toString(response.getEntity(),"UTF-8"); /** * 转换成json,根据合法性返回json或者字符串 */ try{ jsonObject = JSONObject.parseObject(result); return jsonObject; }catch (Exception e){ return result; } }else{ LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 146, "POST请求失败!"); } }catch (Exception e){ LOGGER.error("HttpClientService-line: {}, Exception:{}", 149, e); }finally { /* response.close(); client.close();*/ } return null; } /** * 发送POST请求(无请求头Accept) * @param url * @param nameValuePairList * @return JSON或者字符串 * @throws Exception */ public static Object sendPostNoAccept(String url, List nameValuePairList) throws Exception{ JSONObject jsonObject = null; HttpClient client = new SSLClient(); HttpResponse response = null; try{ /** * 创建一个httpclient对象 */ client = HttpClients.createDefault(); /** * 创建一个post对象 */ HttpPost post = new HttpPost(url); /** * 包装成一个Entity对象 */ StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8"); /** * 设置请求的内容 */ post.setEntity(entity); /** * 设置请求的报文头部的编码 */ post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded;")); /** * 设置请求的报文头部的编码 */ //post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8")); /** * 执行post请求 */ response = client.execute(post); /** * 获取响应码 */ int statusCode = response.getStatusLine().getStatusCode(); if (SUCCESS_CODE == statusCode){ /** * 通过EntityUitls获取返回内容 */ String result = EntityUtils.toString(response.getEntity(),"UTF-8"); /** * 转换成json,根据合法性返回json或者字符串 */ try{ jsonObject = JSONObject.parseObject(result); return jsonObject; }catch (Exception e){ return result; } }else{ LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 146, "POST请求失败!"); } }catch (Exception e){ LOGGER.error("HttpClientService-line: {}, Exception:{}", 149, e); }finally { /* response.close(); client.close();*/ } return null; } /** * 组织请求参数{参数名和参数值下标保持一致} * @param params 参数名数组 * @param values 参数值数组 * @return 参数对象 */ public static List getParams(Object[] params, Object[] values){ /** * 校验参数合法性 */ boolean flag = params.length>0 && values.length>0 && params.length == values.length; if (flag){ List nameValuePairList = new ArrayList<>(); for(int i =0; i map = new HashMap(); // map.put("userName", "9999"); // map.put("password", "123456"); // Object result2 = HttpClientService.sendPostJson(url, new HashMap(), map); // System.out.println("POST返回信息:" + result2); String url = "http://192.168.210.7:8091/api/base/depts"; Map headerMap = new HashMap(); headerMap.put("appId", "app01"); headerMap.put("v", "1.0"); headerMap.put("random", "123456"); headerMap.put("timestamp", "1660639939220"); headerMap.put("sign", "396AADDF69F55EC719E3985C87B23C4C"); Map bodyMap = new HashMap(); bodyMap.put("pageIndex", 1); bodyMap.put("pageSize", 100); Object result2 = HttpClientService.sendPostJson(url, headerMap, bodyMap); System.out.println("POST返回信息:" + result2); } public static Map doPost(String url, PageData pd) { JSONObject jsonObject = null; HttpResponse response = null; List nameValuePairList = new ArrayList(); Map map = (Map)pd; System.out.print("参数:{"); for(Map.Entry entry : map.entrySet()){ System.out.print(entry.getKey().toString() + ":" + entry.getValue().toString() + ","); nameValuePairList.add(new BasicNameValuePair(entry.getKey().toString(), entry.getValue().toString())); } System.out.println("}"); try{ /** * 创建一个httpclient对象 */ HttpClient client = HttpClients.createDefault(); /** * 创建一个post对象 */ HttpPost post = new HttpPost(url); /** * 设置请求的报文头部的编码 */ post.setHeader(new BasicHeader("Source", "zcloud")); /** * 设置请求的报文头部的编码 */ post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded;")); /** * 包装成一个Entity对象 */ StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8"); /** * 设置请求的内容 */ post.setEntity(entity); /** * 执行post请求 */ response = client.execute(post); /** * 获取响应码 */ int statusCode = response.getStatusLine().getStatusCode(); // System.out.println("statusCode:" + statusCode); if (SUCCESS_CODE == statusCode){ /** * 通过EntityUitls获取返回内容 */ String result = EntityUtils.toString(response.getEntity(),"UTF-8"); // System.out.println(result); /** * 转换成json,根据合法性返回json或者字符串 */ try{ jsonObject = JSONObject.parseObject(result); Map maps = new HashMap(); maps = parseJSON2Map(jsonObject); return maps; }catch (Exception e){ e.printStackTrace(); return null; } }else{ LOGGER.error("HttpClientUtil-line: {}, errorMsg:{}", 146, "POST请求失败!"); } } catch (Exception e){ LOGGER.error("HttpClientUtil-line: {}, Exception:{}", 149, e); } finally { /* response.close(); client.close();*/ } return null; } public static Map parseJSON2Map(JSONObject json) { Map map = new HashMap(); // 最外层解析 for (Object k : json.keySet()) { Object v = json.get(k); // 如果内层还是json数组的话,继续解析 if (v instanceof JSONArray) { List> list = new ArrayList>(); Iterator it = ((JSONArray) v).iterator(); while (it.hasNext()) { JSONObject json2 = (JSONObject) it.next(); list.add(parseJSON2Map(json2)); } map.put(k.toString(), list); } else if (v instanceof JSONObject) { // 如果内层是json对象的话,继续解析 map.put(k.toString(), parseJSON2Map((JSONObject) v)); } else { // 如果内层是普通对象的话,直接放入map中 map.put(k.toString(), v); } } return map; } }